簡體   English   中英

Windows 調用約定

[英]Windows calling conventions

嗨,所以一個朋友告訴我:

調用約定是 c++ function 說明符,用於確定調用另一個 function 的 function 是否應該清理堆棧幀,或者這將是被調用的 function 的工作

真的嗎?

另外,清潔部分在系統調用 function 調用另一個系統調用時看起來如何?

提前致謝。

從歷史上看,Fortran 和 Pascal 語言使用一種約定,調用者將其 arguments 壓入堆棧(堆棧中的第一個參數在前),然后調用被調用者 function。被調用者中的序言代碼通常彈出返回地址和參數,並且再次推送返回地址(這部分實際上是一個實現細節)。 當被調用者返回時,堆棧是干凈的。

然后 C 語言能夠調用 function,變量號為 arguments。約定是調用者以相反的順序壓入參數(堆棧中的最后一個參數在前),然后調用被調用者 function。被調用者然后訪問堆棧中的參數而不彈出任何東西(第一個參數的地址就在返回地址附近)。 當被調用者返回時,堆棧中仍然包含參數,調用者應該清理它們。

這仍然在 Windows 系統中使用,其中大多數 API function 使用帕斯卡約定 ( winapi ) 而默認情況下 C 或 C++ 方法默認使用 8 cdecl約定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM