值类型如何存储?

时间:2013-01-18 03:04:45

标签: c#

  

可能重复:
  Where are .NET local variables stored?

function storeonstack()
{
 int a;
 int b;
 int c;
 a=1;
 b=1;
 a=2
 c=2;
}

有些人可以解释一下这些值类型是如何存储在堆栈中的吗?

2 个答案:

答案 0 :(得分:3)

实际上,*如果值类型是方法中的局部变量,则它们存储在堆栈中;如果它们是引用类型的成员,则存储在堆上。有时,如果局部变量包含在闭包中,它们也可能存储在堆上。这是必需的,以便变量可以在函数退出后继续生效(并清除堆栈帧)。局部变量在被用于操作时也可以存储在寄存器中,然后再泄漏回堆栈。根据JIT优化,局部变量可能只存在于寄存器中,或者可能根本不存在。但是,成员变量应该始终存在。

*是的,从技术上讲,不能保证堆栈和堆之类的东西存在,但是说实话,在大多数(如果不是全部).NET实现中,都有堆栈和堆就像在C程序中一样。

答案 1 :(得分:0)

这是一个实现细节,取决于编译器。它可能因编译器而异。

The Truth About Value Types

The stack is an implementation detail

相关问题