StackOverflowException

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

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


person Pat    schedule 10.09.2009    source источник
comment
Что именно вы имеете в виду под условиями? Он вызывается, когда стек заполнен, и метод пытается выделить больше места в стеке для хранения локальных переменных и терпит неудачу. В частности, это вызывает код операции Localloc IL.   -  person Lasse V. Karlsen    schedule 11.09.2009
comment
Я имею в виду, есть ли жесткое ограничение на то, когда стек заполняется по существу, или это какой-то другой процент памяти или какое-то другое соотношение текущей машины?   -  person Pat    schedule 11.09.2009


Ответы (4)


Из документации:

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

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

person Lee    schedule 10.09.2009

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

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

person Philippe Leybaert    schedule 10.09.2009

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

person GregC    schedule 07.04.2011

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

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

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

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

person Abdul Saboor    schedule 30.11.2012