Устройство памяти

Стек программы
↓ - стек растёт вниз
старшие адреса
СЕГМЕНТ СТЕКА
Возможная "дыра" в адресном пространстве
СЕГМЕНТ ДАННЫХ
младшие адреса
Стек
Это область памяти, которая используется для хранения локальных переменных. Каждый раз, когда вы вызываете функцию, все её локальные переменные создаются в стеке. В переводе с английсткого stack - стопка. Здесь работает тот же принцип, что и со стопкой тарелок, - переменные добавляются при входе в функцию, а при выходе убираются. Странность заключается в том, что стек по сути перевёрнут вверх дном. Он начинается с верхней части памяти и "растёт" вниз.
Куча
Куча предназначена для динамической памяти - наборов данных, которые создаются во время работы программы и существуют продолжительное время.
Константы
Константы также создаются вместе с запуском программы, но они помещаются в память, предназначенную только для чтения. Константами могут быть, например, строковые литералы - они нужны для работы программы, но никогда не должны изменяться.
Глобальная память
Используется для хранения глобальных переменных. Глобальные переменные создаются при запуске программ и мы можем спокойно их изменять, но это нежелательно...
Код
Многие операционные системы размещают код в самой нижней части адресного пространства. Эта область также не предназначена для перезаписи. Это часть памяти, куда, в сущности, загружается скомпилированный код.

Виртуальная память (virtual memory)

Каждая программа думает, что она работает непосредтвенно с физической памятью и что вся память в её распоряжении, но по факту она работает с виртуальной памятью. Виртуальная память собрана из кусков физической памяти. Эти куски называются страницами и они выделяются операционной системой по запросу программы. Связь между областями виртуальной памяти и страницами физической памяти записывается в таблицу страниц и контролируется операционной системой.

Таблица страниц (page table)

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

Поддержите проект, если он помог вам

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