1

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

4

2 回答 2

1

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

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

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

实际结果很大程度上取决于所使用的抖动,x86 vs x64 vs ARM。以及是否使用 Debug 或 Release 构建。因此,您应该认为这是一个完整的实现细节。

于 2012-11-27T13:53:54.603 回答
0

堆栈大小是可配置的,并且可以通过几种不同的方式进行设置

默认情况下,它设置为1 MB。对于 ASP.NET 应用程序,它是256 KB更多信息在这里)。

于 2012-11-27T08:19:13.247 回答