В приведенной ниже ссылке ответ Sdaz MacSkibbons дает краткий обзор адресного пространства процесса в системах виртуальных адресов.Адресное пространство процесса в системах виртуальных адресов
What happens when a computer program runs?
Теперь предположим, что каждый процесс получает 4 ГБ виртуального адресного пространства. Теперь это означает, что верхние адреса этого виртуального адресного пространства получат стекную часть (предположим, что адрес стека начинается с 0), а адресное пространство снизу будет выделено для текста, данных, глобалов и кучи. Так как размер кучи изменяется, новые распределения malloc будут отображать виртуальные адресные пространства в реальной памяти напрямую или они проверяют, свободны ли/доступны ли ранее выделенные виртуальные адресные страницы в кучу. И как насчет того, нужно ли нам большое количество памяти кучи, например, более 4 ГБ, чем то, как поддерживает процесс?
Заранее спасибо.
Зависит от ОС. Создайте C-программу, используя printf с% p, чтобы распечатать адреса локальных переменных (stacK), по сравнению с выделенными (malloc()) переменными, по сравнению с адресами статических переменных (программных данных), по сравнению с адресами функций (указатель на функцию) .... Часть виртуального адресного пространства используется для ОС. Также есть некоторые данные, относящиеся к каждому запущенному потоку (например, начальное значение для rand()) (для доступа к этому могут использоваться регистры сегментов FS или GS или их можно отобразить в виртуальное адресное пространство). – rcgldr