StackOverflowException - PullRequest
       6

StackOverflowException

5 голосов
/ 11 сентября 2009

С StackOverflowException условия должны быть выброшены жестко или зависеть от машины, на которой выполняется код?

Я почти уверен в последнем, но потерпел неудачу в своих поисках и не задаю здесь достаточно вопросов.

Ответы [ 4 ]

8 голосов
/ 11 сентября 2009

С документация :

... выбрасывается при переполнении стека выполнения, поскольку он содержит слишком много вложенных вызовов методов.

Поскольку размер стека зависит от архитектуры и может даже быть переопределен на компьютере, да, это значение не является жестко заданным, хотя в Windows оно обычно довольно статично. Если я правильно помню, это по умолчанию 1 МБ.

2 голосов
/ 11 сентября 2009

Хотя и не идеально подходит для вашего вопроса, см. Также:

Как изменить размер стека по умолчанию для управляемого исполняемого файла.net

0 голосов
/ 30 ноября 2012

Исключение, которое выбрасывается при переполнении стека выполнения, поскольку он содержит слишком много вложенных вызовов методов. Этот класс не может быть унаследован . MSDN

Я попробовал этот код с некоторыми изменениями. Я изменяю вышеупомянутое утверждение в соответствии с моим опытом

Framework 4.0 Исключение, которое выбрасывается при переполнении стека выполнения, поскольку он содержит 7573 вызова вложенных методов. Этот класс не может быть унаследован.

Framework 2.0 Исключение, которое выбрасывается при переполнении стека выполнения, поскольку он содержит 7038 вложенных вызовов методов. Этот класс не может быть унаследован.

0 голосов
/ 07 апреля 2011

Кадры стека будут различаться в зависимости от режима адресации вашей ОС. Я считаю, что x64 использует немного большие стековые фреймы. Имейте в виду, что пространство процесса может расти намного больше, чем в x86, поэтому в целом вы должны иметь возможность настроить свой стек так, чтобы он принимал больше кадров в x64, если размер ОЗУ и размер файла подкачки не являются проблемой.

...