2009-09-10 4 views
5

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

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

+0

Что именно вы подразумеваете под условиями? Он бросается, когда стек заполнен, и метод пытается выделить больше места в стеке для хранения локальных переменных и сбой. В частности, это код операции «Localloc» IL, который вызывает это. –

+0

Я имею в виду, если есть жесткий предел, когда стек заполняется по существу или это какой-то другой процент памяти или какое-то другое отношение текущей машины? – Pat

ответ

8

От the documentation:

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

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

+0

+1. Хороший ответ. – David

0

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

0

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

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

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

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

Смежные вопросы