Каково физическое представление кучи и стека?


9

Я легко могу понять, как .bss и код имеют физические представления в процессоре, который имеет банк памяти для инструкций, которые может подсчитывать счетчик программ, а bss (начальный символ блока) является просто глобальными данными. Но тогда есть стек для локальных переменных и куча для динамической памяти. Как эти вещи включаются в схему физически?

Ответы:


6

Примечание: я имею в виду, в основном, x86, поскольку я наиболее знаком с ним, и он широко задокументирован:

На x86 (и большинстве других архитектур) стек просто находится в памяти, как и все остальное. Процессор управляет стеком через указатель, который обычно хранится в регистре (указатель стека). Инструкции push и pop изменят значение указателя стека, меняя положение вершины стека.

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

Однако подкачка и сегментация связаны с кучей. Они в основном связаны с многозадачностью, когда процессам нельзя разрешать изменять оперативную память, которой они явно не владеют.


3
Пейджинг больше относится к управлению памятью в целом - единице, в которой физическая память отображается на логический адрес, - а не просто к ограничениям доступа, хотя последние, как правило, применяются в качестве дополнительной функции блока управления памятью.
Крис Страттон

4

По логике говоря, стек и куча - это обычно просто память; хотя на уровне реализации они, как мы надеемся, будут обслуживаться главным образом из кэша. В большинстве систем они попадают туда динамически с помощью алгоритмов кэширования, но были системы, которые поддерживают явное расположение в кэше или другой памяти, превышающей обычную, и, вероятно, также те, которые поддерживают намеки на то, что конкретные данные должны иметь преимущественный приоритет для размещения там как космические разрешения.

Надеемся, что разработка низкоуровневого программного обеспечения и генераторов кода компилятора учитывает организацию доступа к данным, что, вероятно, приведет к хорошему использованию кэша по сравнению с постоянными потерями кэша.

Некоторые процессоры имеют регистр обратного адреса, который функционирует как своего рода явный кэш стека с одной глубиной (возможно, есть и с несколькими аппаратными стеками, хотя примеры не приходят на ум).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.