Как компилятор выкладывает код в память

Хорошо, у меня есть немного студенческий вопрос новичка.

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

Но как все это работает на менее теоретическом уровне?

Компилятор просто предполагает, что у него есть целая область памяти от адреса 0 до бесконечности? А потом просто начать назначать вещи?

И где это расположение инструкций, стек и куча? В верхней части области памяти, конец области памяти?

И как это тогда работает с виртуальной памятью? Виртуальная память прозрачна для программы?

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

СПАСИБО много заранее!

Ответы на вопрос(3)

Ваш ответ на вопрос