变量声明和内存分配

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

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

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

谢谢。

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

 int a; 

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

 int a = 0; 

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

 SomeClass a; 

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

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

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

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

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