首頁 > 後端開發 > C++ > 為什麼此彙編程式碼在函數呼叫之前包含初始'push rax”?

為什麼此彙編程式碼在函數呼叫之前包含初始'push rax”?

DDD
發布: 2024-12-15 18:55:10
原創
190 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板