Устройство памяти
.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;
}
Стек программы
↓ - стек растёт вниз
старшие адреса
СЕГМЕНТ СТЕКА
Возможная "дыра" в адресном пространстве
↑ - куча растёт вверх
Куча
Глобальные и статические переменные
(данные)
СЕГМЕНТ ДАННЫХ
младшие адреса
СЕГМЕНТ КОДА
Стек Это область памяти, которая используется для хранения локальных переменных. Каждый раз, когда вы вызываете функцию, все её локальные переменные создаются в стеке. В переводе с английсткого stack - стопка. Здесь работает тот же принцип, что и со стопкой тарелок, - переменные добавляются при входе в функцию, а при выходе убираются. Странность заключается в том, что стек по сути перевёрнут вверх дном. Он начинается с верхней части памяти и "растёт" вниз. Куча Куча предназначена для динамической памяти - наборов данных, которые создаются во время работы программы и существуют продолжительное время. Константы Константы также создаются вместе с запуском программы, но они помещаются в память, предназначенную только для чтения. Константами могут быть, например, строковые литералы - они нужны для работы программы, но никогда не должны изменяться. Глобальная память Используется для хранения глобальных переменных. Глобальные переменные создаются при запуске программ и мы можем спокойно их изменять, но это нежелательно... Код Многие операционные системы размещают код в самой нижней части адресного пространства. Эта область также не предназначена для перезаписи. Это часть памяти, куда, в сущности, загружается скомпилированный код.## Виртуальная память (virtual memory)
Каждая программа думает, что она работает непосредтвенно с физической памятью и что вся память в её распоряжении, но по факту она работает с виртуальной памятью. Виртуальная память собрана из кусков физической памяти. Эти куски называются страницами и они выделяются операционной системой по запросу программы. Связь между областями виртуальной памяти и страницами физической памяти записывается в таблицу страниц и контролируется операционной системой.
Таблица страниц (page table)
Таблица на самом деле имеет древовидную структуру. И запрос к этой таблице это очень дорогое удовольствие и на его выполнение тратятся сотни циклов процессора.
Комментарии
Пока комментариев нет.