堆指针寄存器?
Heap pointer register?
许多 ISA,例如 MIPS,都有一个名为 "stack pointer" 的寄存器来指示栈顶。为什么 "heap pointer" 不注册?堆的顶部是否存储在内存中?
Why isn't a "heap pointer" register?
没有"heap pointer"寄存器,因为没有malloc
CPU指令。
之所以有"stack pointer"寄存器是因为有CPU条直接操作堆栈的指令,如call
、push
、[=13] =] 在 x86 上。这些指令通常要求存在架构堆栈指针寄存器。
注意:据我所知,MIPS 上没有这样的指令;您必须自己将堆栈指针调整为 push/pop 值,并且 "call" 将 return 地址保存在 Link 寄存器中。尽管如此,调用堆栈和局部变量的概念对于大多数语言来说都是如此重要,以至于使用寄存器来跟踪堆栈位置,因为它比内存访问快得多。
Does the top of the heap get stored in memory?
malloc
有很多不同的实现方式,但它们都只接受一个size
参数,除了malloc
将状态保存在全局变量中别无选择。
许多 ISA,例如 MIPS,都有一个名为 "stack pointer" 的寄存器来指示栈顶。为什么 "heap pointer" 不注册?堆的顶部是否存储在内存中?
Why isn't a "heap pointer" register?
没有"heap pointer"寄存器,因为没有malloc
CPU指令。
之所以有"stack pointer"寄存器是因为有CPU条直接操作堆栈的指令,如call
、push
、[=13] =] 在 x86 上。这些指令通常要求存在架构堆栈指针寄存器。
注意:据我所知,MIPS 上没有这样的指令;您必须自己将堆栈指针调整为 push/pop 值,并且 "call" 将 return 地址保存在 Link 寄存器中。尽管如此,调用堆栈和局部变量的概念对于大多数语言来说都是如此重要,以至于使用寄存器来跟踪堆栈位置,因为它比内存访问快得多。
Does the top of the heap get stored in memory?
malloc
有很多不同的实现方式,但它们都只接受一个size
参数,除了malloc
将状态保存在全局变量中别无选择。