Кто определяет размер стека? - PullRequest
0 голосов
/ 25 сентября 2018

Я сейчас читаю C ++ Primer Plus .В главе 9 Модели памяти и пространства имен , раздел под названием Автоматические переменные и стек , автор рассказывает о том, как программа управляет автоматическими переменными через стек и какКомпилятор может изменить размер стека по умолчанию.

Этот абзац вызывает много путаницы.Я всегда думал, что ответственность за создание и управление образом процесса для работающей программы лежит на операционной системе, включая, среди прочего, stack и heap .

Посленемного почесывая голову, у меня следующий вывод (не уверен, что правильно) и дополнительные вопросы:

  1. ОС действительно создает образ процесса, включающий стек и прочее.Но компилятор может как-то дать инструкции операционной системе, какой будет размер по умолчанию для стека.Вопросы: каков механизм передачи такой информации?Является ли по умолчанию по умолчанию начальным размером или по умолчанию максимальным размером для стека?Можно ли изменять размер стека во время выполнения?

Означает ли это, что разные программы, работающие в одной и той же системе, могут иметь разные размеры стека?

Кто на самом деле делает укладку и выталкивание?Вовлечена ли ОС (код ядра), когда автоматические переменные складываются и выталкиваются?Я склонен думать, что да, и код может быть из кода / библиотеки, с которой связан код или код во время компиляции.

Причины, по-моему, процесс - это структура, поддерживаемая ОС, код пользователяможет не иметь права изменять его.Кроме того, мы никогда не пишем эти процедуры в явном виде.

Но это только чистое предположение.

Я действительно ценю любую помощь по этой запутанной концепции.

Спасибо

...