为什么在这个函数调用程序集中进行初始 RAX Push?
在提供的 C 代码片段的程序集输出中,函数 f 显示RAX 寄存器的初始推送到stack.
基本原理
x64 ABI 要求堆栈对齐方式在调用指令之前为 16 个字节。由于调用将 8 字节返回地址推送到堆栈上,从而破坏了对齐,因此编译器会插入推送操作来保持对齐。
这种推送虚拟值的特定选择针对配备堆栈引擎的处理器进行了优化,与 sub rsp 相比,它可以更有效地执行推送指令,8。
相比之下,g 函数在没有 std::function 包装器的情况下执行简单的函数调用,不需要堆栈对齐调整,因此不会执行此初始推送。
以上是为什么此汇编代码在函数调用之前包含初始'push rax”?的详细内容。更多信息请关注PHP中文网其他相关文章!