堆栈溢出异常

5

在 StackOverflowException 中,抛出的条件是硬编码的还是依赖于代码运行的机器?

我几乎可以肯定是后者,但是我搜索失败了,在这里也没有问足够的问题。


条件是什么意思?当堆栈已满且方法尝试在堆栈上分配更多空间来保存局部变量,但失败时会引发该异常。具体来说,是由 "Localloc" IL 操作码引发的异常。 - Lasse V. Karlsen
我的意思是,如果堆栈被填满的硬限制是什么,或者它是内存的某个其他百分比,还是当前机器的某个其他比率? - Pat
4个回答

8

文档中可以得知:

... 当执行栈包含太多嵌套方法调用时,就会抛出此异常。

由于堆栈的大小取决于架构,并且甚至可以在机器上覆盖它,所以是不是硬编码的值,但在Windows上通常是静态的。如果我没记错的话,默认情况下它的大小为1MB。


2

0

栈帧将根据您的操作系统寻址模式而异。我相信x64使用稍大的栈帧。请记住,进程空间能够比x86更多地增长,因此如果RAM和交换文件大小不是问题,则总体上应该能够配置您的堆栈以在x64上接受更多的帧。


0

当执行堆栈包含太多嵌套方法调用时,会抛出此异常。此类不能被继承。MSDN

我尝试了这个代码并进行了一些更改。我根据自己的经验修改了上述语句

框架4.0 当执行堆栈包含7573个嵌套方法调用时,会抛出此异常。此类不能被继承。

框架2.0 当执行堆栈包含7038个嵌套方法调用时,会抛出此异常。此类不能被继承。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接