То что такое stack и heap объяснять не нужно, материал о том как это работает и что происходит с переменным в функциях больше чем достаточно, но потратив некоторое время заметил, что нету практически адекватных материалов о том, как происходит выделения мэмори при первом запуске программы?
Когда программа компилируется и готовится билд, на тот момент уже высчитывается минимальное нужное количество памяти для ее запуска и работы, а сама программа занимает кусок памяти в stackовой области?
Можно раскрытый ответ или хороший материал, который это описывает?
Как изначально под программу выделяется память и в какой именно части?
А в чем проблема? Транслятор знает размеры всех объектов. При входе в функцию выделяется стековый кадр нужного размера и в нем размещаются локальные переменные. Размеры объектов в куче тоже известны или в момент трансляции или в момент исполнения. Аппаратный стек увеличивается по мере работы. Не все функции вызываются при конкретном запуске (ну не прошла программа по этой ветке по воле пользователя), поэтому аппаратный стек от запуска к запуску может быть разным. Вобщем стек в момент запуска не выделен, известна только вершина стека а там уж как пойдет. Иногда и переполнения стека (aka stackoverflow) бывают. :-)
UPD1:
А еще бывает компилированный стек. Это когда машина без аппаратного стека. Тогда транслятор и линкер анализируют код на предмет какие функции кого вызывают и размещают стек в озу так, чтобы стековые кадры при вызовах не перекрывались. Как-то я пользовался Си-компилятором от фирмы Таскинг (или Кейл, не помню сейчас) для интеловской 51-ой однокристаллки. Эта машина с аппаратным стеком в 5 или 10 байт и он используется только для прерываний. Поэтому для собственно программы там как раз был сделан компилированный стек. И, между прочим, много вызовов помещалось и все работало. Только ругалось на функции обработки прерываний, которые нигде не вызываются. Приходилось им делать вызов, но который в рантайме никогда не срабатывал.
Вот в таких архитектурах стек действительно обсчитывается и выделяется при трансляции и линковке. Но сейчас это не модно, аппаратных ресурсов стало много, так что стек и кучу никто на этапе трансляции не считает.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей