我想知道有人能否解释一下在ARM汇编中,堆栈指针(Stack Pointer)和帧指针(Frame Pointer)的区别。
这是我找到的一张图片,可能会很有用。您可以看到,从FP偏移总是正确的,但从SP偏移将取决于动态区域的大小,因此在分配运行时变量空间的函数(如C99 VLA / alloca)中不能硬编码。https://www.cs.purdue.edu/homes/hosking/502/spim/node23.html。不这样做的函数可以优化掉帧指针(在将高级源语言(如C)转换为汇编时,优化编译器会自动完成这项工作)。