Можно создать дубликат:
How is heap and stack memories managed, implemented, allocated?Как обычно используется куча?
Привет, мой вопрос о куче, а не структуры данных, но область памяти, которая используется для динамического выделения памяти.
Предположим, что мы пишем программу на C (или, возможно, C++) и где-то в глубине своего кода вызывается вызов malloc() (или оператор new вызывается, в случае C++). Теперь, каково местоположение выделенной памяти? Компилятор (компоновщик?) Добавляет сегмент данных, который используется в качестве кучи? Как определяется размер этого сегмента? Что произойдет, если мы попытаемся выделить кусок памяти, который больше, чем весь «сегмент кучи»? Будет ли расширяться куча? Если да, то как?
Хорошо, как же работает защита? Когда мы распределяем память динамически, только наш процесс может получить к ней доступ, если другие попытаются выполнить операцию чтения/записи там, произойдет ошибка. Являются ли страницы отмеченными как принадлежащие к определенному процессу? – 2010-11-20 10:04:39
@grigory, no. страницы отмечены как действительные или нет в таблицах страниц (бит P или V на x86). У PTE также есть бит R/W. Набор «активных» таблиц страниц «переключается» на коммутаторе контекста процесса в соответствии с активностью нового активного процесса. Каждый процесс имеет свой собственный каталог страниц (== набор таблиц страниц, каждый из которых содержит набор страниц + атрибутов) –
@Grigory: Страницы для моего процесса не существуют для других процессов - они виртуальны. ОС сопоставляет виртуальные страницы с реальными страницами. Вам действительно нужно проверить виртуальную память. – Puppy