变量声明&内存分配

时间:2014-07-07 12:02:12

标签: c# .net

我想知道在局部变量声明过程中是否分配了内存。

假设我在函数内部编写了这段代码, int a = 10; 分配内存并将值10存储在其中。

int a; 怎么样?这个声明语句会分配4个字节的内存吗?

感谢。

2 个答案:

答案 0 :(得分:2)

调用方法时,每个局部变量的空间都在堆栈上分配。

因此,如果在方法中声明int变量,它的堆栈帧将占用额外的4个字节的内存。

在其他任何地方都不使用额外的内存,并在方法返回时清除它。

这里要理解的重要一点是,MSIL不支持在方法中的任何位置声明属性。每当在C#中声明一个变量时,声明都会被移动到编译后的字节码中的方法头。调用方法时会分配每个变量。

答案 1 :(得分:2)

局部变量通常存储在堆栈中,因此确实为int分配了字节:

int a;

因为它只使用默认值(0),所以它与:

相同
int a = 0;

int是一个值类型,因此在堆栈中存储其值。如果要使用引用类型创建局部变量:

SomeClass a;

然后在堆栈上,它将仅被分配引用(值为null,因为它是引用类型的默认值)。有关详细信息,请参阅this question