Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在阅读 ARM 过程调用标准:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0041c/Cegbidie.html
它说:
仅支持不需要帧指针寄存器的 APCS 变体。需要帧指针寄存器的 APCS 变体已过时。记录这些变体只是为了向后兼容。
有人能告诉我为什么吗?如果在编译时堆栈帧大小未知,我认为需要帧指针。
假设调用约定指定了如何在函数退出时清理堆栈,您只需要拥有堆栈指针。编译器可以跟踪函数内的所有堆栈操作,因此无需将这些信息保存在单独的寄存器中。
这当然很方便,但不是绝对必要的。