什么寄存器指向堆?

Cel*_*tas 4 c++ heap assembly arm

我刚学完ARM架构/组装.如果SP寄存器保存下一个存储器位置的地址以放入数据,那么堆的地址是什么?例如,在C++中,如果你在堆上声明一个对象(例如MyObj example = new MyObj();),那么程序集的外观会是什么样的,在某种意义上它会知道在哪里example

aus*_*len 6

在此上下文中的堆栈是OS/EABI提供的较低级别结构.这就是为什么有一个传统的寄存器.但是,堆是OS提供的更高级别的结构.因此管理和使用它取决于与您的应用和操作系统的协议.在汇编术语中,您将使用该堆通过寄存器取消引用某些地址.


Jon*_*ood 5

SP寄存器通常用于跟踪堆栈中的当前位置.这意味着它几乎需要始终指向堆栈.

对于堆来说同样不能说.当您需要访问变量时,该变量的地址将存储在应用程序的指针或其他内存引用中.在需要该地址时,可以使用寄存器来进行参考.但是哪个寄存器的细节不仅依赖于编译器,而且还可能取决于在从同一编译器优化代码之后哪个寄存器可用.