為什麼在這個函數呼叫程式集中進行初始 RAX Push?
在提供的C 程式碼片段的組件輸出中,函數f 顯示RAX 暫存器的初始推送到stack.
基本原理
x64 ABI 要求堆疊對齊方式在呼叫指令之前為16 個位元組。由於呼叫將 8 位元組傳回位址推送到堆疊上,從而破壞了對齊,因此編譯器會插入推送操作來保持對齊。
這種推送虛擬值的特定選擇針對配備堆疊引擎的處理器進行了優化,與 sub rsp 相比,它可以更有效地執行推送指令,8。
相較之下,g 函數在沒有 std::function 包裝器的情況下執行簡單的函數調用,不需要堆疊對齊調整,因此不會執行此初始推送。
以上是為什麼此彙編程式碼在函數呼叫之前包含初始'push rax”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!