首页 >后端开发 >C++ >为什么此汇编代码在函数调用之前包含初始'push rax”?

为什么此汇编代码在函数调用之前包含初始'push rax”?

DDD
DDD原创
2024-12-15 18:55:10192浏览

Why Does This Assembly Code Include an Initial `push rax` Before a Function Call?

为什么在这个函数调用程序集中进行初始 RAX Push?

在提供的 C 代码片段的程序集输出中,函数 f 显示RAX 寄存器的初始推送到stack.

基本原理

x64 ABI 要求堆栈对齐方式在调用指令之前为 16 个字节。由于调用将 8 字节返回地址推送到堆栈上,从而破坏了对齐,因此编译器会插入推送操作来保持对齐。

这种推送虚拟值的特定选择针对配备堆栈引擎的处理器进行了优化,与 sub rsp 相比,它可以更有效地执行推送指令,8。

相比之下,g 函数在没有 std::function 包装器的情况下执行简单的函数调用,不需要堆栈对齐调整,因此不会执行此初始推送。

以上是为什么此汇编代码在函数调用之前包含初始'push rax”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn