StackOverflowException

时间:2009-09-10 21:55:19

标签: .net exception specifications stack-overflow

使用StackOverflowException是硬编码还是依赖运行代码的机器的条件?

我几乎可以肯定后者,但我的搜索失败,并且在这里没有提出足够的问题。

4 个答案:

答案 0 :(得分:8)

来自the documentation

  

...在执行堆栈溢出时抛出,因为它包含太多嵌套方法调用。

由于堆栈的大小取决于体系结构,甚至可以在计算机上覆盖,是的,这个值不是硬编码的,尽管它在Windows上通常是非常静态的。如果我没记错的话,默认情况下它的大小是1MB。

答案 1 :(得分:2)

虽然不是您问题的完美匹配,但请参阅:

How do you change default stack size for managed executable.net

答案 2 :(得分:0)

堆栈帧将根据操作系统的寻址模式而有所不同。我相信x64使用稍大的堆栈帧。请记住,进程空间的增长能力远远超过x86,所以总体而言,如果RAM和交换文件大小不成问题,您应该能够将堆栈配置为接受x64上的更多帧。

答案 3 :(得分:0)

执行堆栈溢出时抛出的异常,因为它包含太多嵌套方法调用。此类无法继承MSDN

我尝试了这个code并进行了一些更改。我根据自己的经验改变了上述陈述

Framework 4.0 执行堆栈溢出时抛出的异常,因为它包含7573个嵌套方法调用。此类无法继承。

Framework 2.0 执行堆栈溢出时抛出的异常,因为它包含7038个嵌套方法调用。此类无法继承。