2016-11-30 11 views
1

Многие ISA, такие как MIPS, имеют регистр, называемый «указатель стека», чтобы указать верхнюю часть стека. Почему не является регистром «указатель кучи»? Сохраняется ли верхняя часть кучи в памяти?Регистр указателя кучи?

+1

Концепция «кучи» (как правило) управляется шагом над процессором. Нет причин иметь «указатель кучи», если ЦП не знает, что он существует. В некоторых системах это может вообще не существовать. В таких случаях у вас просто память в определенном диапазоне, и вы сами управляете ею. –

ответ

2

Почему не указан указатель "heap pointer"?

Не существует регистра «указатель кучи», потому что нет инструкции malloc.

Причина есть «указатель стека» регистр, потому что есть команды процессора, которые непосредственно манипулировать стека, такие как call, push и pop на x86. В этих инструкциях обычно указывается существование регистра указателя архитектуры стека.

Примечание: AFAIK нет таких инструкций по MIPS; вы должны самостоятельно настроить указатель стека на значения push/pop, а «call» сохраняет адрес возврата в реестре ссылок. Тем не менее концепции стека вызовов и локальных переменных являются настолько важными для большинства языков, что для отслеживания местоположения стека используется регистр, поскольку он намного быстрее, чем доступ к памяти.

Сохраняется ли верхняя часть кучи в памяти?

Есть много различных реализаций malloc, но все они только принимают параметр size, нет выбора, кроме как для malloc сохранить состояние в глобальных переменных.

+1

Хмм ... для инструкций типа 'store', который обычно принимает регистр и местоположение памяти в качестве аргументов в RISC ISAs, адрес памяти может быть любым в памяти программы - стек или куча. Итак, в этом смысле есть инструкции, которые манипулируют кучей тоже ... – xri

+3

Или, другими словами, потому что «куча» - это не стек! У него нет «верхнего» или «нижнего». Нет порядка для хранения и извлечения. –

+0

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