值类型的堆栈大小

时间:2012-11-27 08:10:25

标签: .net value-type stack-size stack-memory

所有人都说价值类型存储在堆栈中。但存储值类型的堆栈大小是多少??没有人解释它。

2 个答案:

答案 0 :(得分:1)

计算方法的堆栈帧大小是抖动的工作。这是方法中所有局部变量大小总和的非常简单的加法。所有小值类型都需要4个字节,long和double取8,decimal取16,struct取其对齐成员的总大小。引用类型引用在32位模式下占用4个字节,在64位模式下占用8个字节。

进一步改进的是,抖动优化器可以将局部变量移动到CPU寄存器中,从而加速代码并减少所需的堆栈帧存储(如果不需要溢出)。

嵌套方法调用的堆栈帧大小总和加上保存的cpu寄存器,返回地址和方法参数的开销不能超过堆栈的分配大小。默认情况下,对于32位代码,为1兆字节,对于使用x64作为目标编译的代码,为4兆字节。或者是Thread类构造函数的 maxStackSize 参数。超过分配的大小会产生此站点命名的致命异常。

实际结果在很大程度上取决于所使用的抖动,x86与x64对比ARM。是否使用Debug或Release版本。因此,您应该将此视为完整的实施细节。

答案 1 :(得分:0)

堆栈大小可配置且can be set in several different ways

By default它设置为1 MB。对于ASP.NET应用程序,它是256 KBmore information here)。