Многие ISA, такие как MIPS, имеют регистр, называемый «указатель стека», чтобы указать верхнюю часть стека. Почему не является регистром «указатель кучи»? Сохраняется ли верхняя часть кучи в памяти?Регистр указателя кучи?
ответ
Почему не указан указатель "heap pointer"?
Не существует регистра «указатель кучи», потому что нет инструкции malloc
.
Причина есть «указатель стека» регистр, потому что есть команды процессора, которые непосредственно манипулировать стека, такие как call
, push
и pop
на x86. В этих инструкциях обычно указывается существование регистра указателя архитектуры стека.
Примечание: AFAIK нет таких инструкций по MIPS; вы должны самостоятельно настроить указатель стека на значения push/pop, а «call» сохраняет адрес возврата в реестре ссылок. Тем не менее концепции стека вызовов и локальных переменных являются настолько важными для большинства языков, что для отслеживания местоположения стека используется регистр, поскольку он намного быстрее, чем доступ к памяти.
Сохраняется ли верхняя часть кучи в памяти?
Есть много различных реализаций malloc
, но все они только принимают параметр size
, нет выбора, кроме как для malloc
сохранить состояние в глобальных переменных.
Хмм ... для инструкций типа 'store', который обычно принимает регистр и местоположение памяти в качестве аргументов в RISC ISAs, адрес памяти может быть любым в памяти программы - стек или куча. Итак, в этом смысле есть инструкции, которые манипулируют кучей тоже ... – xri
Или, другими словами, потому что «куча» - это не стек! У него нет «верхнего» или «нижнего». Нет порядка для хранения и извлечения. –
Хорошо, да, все это сводится к инструкциям процессора. Но манипулировать кучей гораздо больше, чем просто писать слово на адрес. Выделение памяти обычно включает в себя поиск свободного блока соответствующего размера и выделение его как выделенного, вероятно, обновление метаданных конкретной реализации и т. Д. Это слишком сложно, чтобы быть единой инструкцией ЦП. –
Концепция «кучи» (как правило) управляется шагом над процессором. Нет причин иметь «указатель кучи», если ЦП не знает, что он существует. В некоторых системах это может вообще не существовать. В таких случаях у вас просто память в определенном диапазоне, и вы сами управляете ею. –