Почему существует ограничение на размер стека?

Возможный дубликат:
Что и где находятся стек и куча

Моя установка Ubuntu имеет ограничение размера стека по умолчанию 8 МБ. Но мне любопытно, почему мы должны ограничивать размер стека пользовательской программы. Одна и та же программа может использовать все 4 ГБ (для 32-битной программы) адресуемого пространства через malloc/mmap и т. Д. Так зачем нам ограничение размера стека? Почему стек не может расти, пока не достигнет кучи?

1 ответ

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

Я не уверен на 100% в том, как стек реализован в Linux, но в Windows для стека зарезервировано большое количество места. Эта сумма может быть установлена ​​в параметрах компилятора (вам может потребоваться больший стек для глубоко рекурсивных программ). Во время выполнения стек может динамически расширяться через систему защитных страниц. В конце стека находится защитная страница, которая при попадании расширяет стек на дополнительную страницу и продвигает защитную страницу вперед на одну.

Исследование стека является еще одной интересной и связанной концепцией. Итак, ваш вопрос "почему стек не может расти до тех пор, пока он почти не достигнет кучи?" Стек действительно растет, но в большинстве случаев наличие большого стека, скорее всего, является нежелательным побочным эффектом ошибки, зарезервированный размер не будет огромным (хотя это можно установить).

Эта статья очень интересна и актуальна для вашего вопроса.

Другие вопросы по тегам