-3

可能重复:
.NET 局部变量存储在哪里?

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

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

4

2 回答 2

3

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

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

于 2013-01-18T03:16:30.977 回答
0

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

关于值类型的真相

堆栈是一个实现细节

于 2013-01-18T03:18:17.090 回答