堆指针寄存器?

Heap pointer register?

许多 ISA,例如 MIPS,都有一个名为 "stack pointer" 的寄存器来指示栈顶。为什么 "heap pointer" 不注册?堆的顶部是否存储在内存中?

Why isn't a "heap pointer" register?

没有"heap pointer"寄存器,因为没有mallocCPU指令。

之所以有"stack pointer"寄存器是因为有CPU条直接操作堆栈的指令,如callpush、[=13] =] 在 x86 上。这些指令通常要求存在架构堆栈指针寄存器。

注意:据我所知,MIPS 上没有这样的指令;您必须自己将堆栈指针调整为 push/pop 值,并且 "call" 将 return 地址保存在 Link 寄存器中。尽管如此,调用堆栈和局部变量的概念对于大多数语言来说都是如此重要,以至于使用寄存器来跟踪堆栈位置,因为它比内存访问快得多。

Does the top of the heap get stored in memory?

malloc有很多不同的实现方式,但它们都只接受一个size参数,除了malloc将状态保存在全局变量中别无选择。