5

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

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

4

4 回答 4

8

文档中

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

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

于 2009-09-10T21:59:40.867 回答
2

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

如何更改托管可执行文件.net 的默认堆栈大小

于 2009-09-10T22:02:07.910 回答
0

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

于 2011-04-07T00:59:52.773 回答
0

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

我尝试了此代码并进行了一些更改。我根据我的经验更改上述声明

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

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

于 2012-11-30T15:27:19.937 回答