Linux-doc Практика — критерий истины!

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

.std_border { border: solid #000000 1px; }

.segment { width: 600px; } .range { padding: 10px; text-align: center; height: 58px; } .stack { background-color: #fff; border-radius: 10px 10px 0 0; } .data { background-color: #fff; border-radius: 0 0 10px 10px; margin-bottom: 10px; } .code { background-color: #fff; border-radius: 10px; } Стек программы
↓ - стек растёт вниз

старшие адреса

СЕГМЕНТ СТЕКА

Возможная "дыра" в адресном пространстве

↑ - куча растёт вверх
Куча

BSS (константы)

Глобальные и статические переменные
(данные)

СЕГМЕНТ ДАННЫХ

младшие адреса

Исполняемый код
(общий)

СЕГМЕНТ КОДА

Стек Это область памяти, которая используется для хранения локальных переменных. Каждый раз, когда вы вызываете функцию, все её локальные переменные создаются в стеке. В переводе с английсткого stack - стопка. Здесь работает тот же принцип, что и со стопкой тарелок, - переменные добавляются при входе в функцию, а при выходе убираются. Странность заключается в том, что стек по сути перевёрнут вверх дном. Он начинается с верхней части памяти и "растёт" вниз. Куча Куча предназначена для динамической памяти - наборов данных, которые создаются во время работы программы и существуют продолжительное время. Константы Константы также создаются вместе с запуском программы, но они помещаются в память, предназначенную только для чтения. Константами могут быть, например, строковые литералы - они нужны для работы программы, но никогда не должны изменяться. Глобальная память Используется для хранения глобальных переменных. Глобальные переменные создаются при запуске программ и мы можем спокойно их изменять, но это нежелательно... Код Многие операционные системы размещают код в самой нижней части адресного пространства. Эта область также не предназначена для перезаписи. Это часть памяти, куда, в сущности, загружается скомпилированный код.## Виртуальная память (virtual memory)

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

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

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

Комментарии

Пока комментариев нет.