了解 C# 的有限堆栈大小:1 MB(32 位)和 4 MB(64 位)
尽管当今 RAM 充足,但 C# 堆栈大小的上限仍然为 32 位进程的 1 MB 和 64 位进程的 4 MB。 这种看似任意的限制源于 Windows NT 的历史设计。
最初的 1 MB 默认值由 David Cutler 团队设置,是本机应用程序的标准,通常会创建大型堆栈帧来处理字符串和缓冲区。 这种做法容易受到缓冲区溢出攻击,影响了在 C# 等托管代码中限制堆栈帧大小的决定。
虽然 .NET 应用程序主要在垃圾收集 (GC) 堆上分配字符串和数组,但维护 1 MB 堆栈可确保与本机代码的兼容性。 .NET 中堆栈的主要用途是在 JIT 编译期间,仅消耗几十 KB。
早期版本的公共语言运行时 (CLR) 预先分配了堆栈空间,将其保留在分页文件中以实现可靠的交换。 现代操作系统和增加的 RAM 使得这一点变得不必要。 CLR 不再预分配,进一步减少了对大堆栈大小的需求。
总之,大小限制反映了历史背景以及与本机程序的兼容性。当前的大小虽然看似很小,但却为大多数 C# 应用程序提供了充足的空间,确保向后兼容性、防止内存溢出并保持可预测的 JIT 编译资源使用。
以上是为什么 C# 堆栈大小限制为 1 MB(32 位)和 4 MB(64 位)?的详细内容。更多信息请关注PHP中文网其他相关文章!