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