function storeonstack()
{
int a;
int b;
int c;
a=1;
b=1;
a=2
c=2;
}
有些人可以解释一下这些值类型是如何存储在堆栈中的吗?
答案 0 :(得分:3)
实际上,*如果值类型是方法中的局部变量,则它们存储在堆栈中;如果它们是引用类型的成员,则存储在堆上。有时,如果局部变量包含在闭包中,它们也可能存储在堆上。这是必需的,以便变量可以在函数退出后继续生效(并清除堆栈帧)。局部变量在被用于操作时也可以存储在寄存器中,然后再泄漏回堆栈。根据JIT优化,局部变量可能只存在于寄存器中,或者可能根本不存在。但是,成员变量应该始终存在。
*是的,从技术上讲,不能保证堆栈和堆之类的东西存在,但是说实话,在大多数(如果不是全部).NET实现中,都有堆栈和堆就像在C程序中一样。
答案 1 :(得分:0)