许多ISA,例如MIPS,都有一个名为"堆栈指针的寄存器"指示堆栈的顶部。为什么不是"堆指针"寄存器?堆顶部是否存储在内存中?
答案 0 :(得分:2)
为什么不是"堆指针"注册
没有"堆指针"注册,因为没有malloc
CPU指令。
有一个"堆栈指针" register是因为存在直接操作堆栈的CPU指令,例如x86上的call
,push
和pop
。这些指令通常要求存在架构堆栈指针寄存器。
注意:AFAIK对MIPS没有这样的说明;你必须自己调整堆栈指针以推送/弹出值,然后调用"将返回地址保存在链接寄存器中。尽管如此,调用堆栈和局部变量的概念对于大多数语言来说都是如此重要,因为寄存器用于跟踪堆栈位置,因为它比内存访问快得多。
堆顶部是否存储在内存中?
malloc
有很多不同的实现,但它们都只采用size
参数,但malloc
没有选项可以将状态保存在全局变量中。