Как компилятор выкладывает код в память
Хорошо, у меня есть немного студенческий вопрос новичка.
Итак, я знаком с тем фактом, что стеки содержат вызовы подпрограмм, а кучи содержат структуры данных переменной длины, а глобальные статические переменные присваиваются постоянным ячейкам памяти.
Но как все это работает на менее теоретическом уровне?
Компилятор просто предполагает, что у него есть целая область памяти от адреса 0 до бесконечности? А потом просто начать назначать вещи?
И где это расположение инструкций, стек и куча? В верхней части области памяти, конец области памяти?
И как это тогда работает с виртуальной памятью? Виртуальная память прозрачна для программы?
Извините за недоумение, но я беру структуры языка программирования, и он продолжает ссылаться на эти регионы, и я хочу понять их на более практическом уровне.
СПАСИБО много заранее!