我想知道在局部变量声明过程中是否分配了内存。
假设我在函数内部编写了这段代码, int a = 10; 分配内存并将值10存储在其中。
int a; 怎么样?这个声明语句会分配4个字节的内存吗?
感谢。
答案 0 :(得分:2)
调用方法时,每个局部变量的空间都在堆栈上分配。
因此,如果在方法中声明int
变量,它的堆栈帧将占用额外的4个字节的内存。
在其他任何地方都不使用额外的内存,并在方法返回时清除它。
这里要理解的重要一点是,MSIL不支持在方法中的任何位置声明属性。每当在C#中声明一个变量时,声明都会被移动到编译后的字节码中的方法头。调用方法时会分配每个变量。
答案 1 :(得分:2)
局部变量通常存储在堆栈中,因此确实为int
分配了字节:
int a;
因为它只使用默认值(0),所以它与:
相同int a = 0;
int
是一个值类型,因此在堆栈中存储其值。如果要使用引用类型创建局部变量:
SomeClass a;
然后在堆栈上,它将仅被分配引用(值为null,因为它是引用类型的默认值)。有关详细信息,请参阅this question