首頁  >  文章  >  後端開發  >  呼叫約定如何影響 C/C 中函數參數的傳遞?

呼叫約定如何影響 C/C 中函數參數的傳遞?

DDD
DDD原創
2024-11-12 07:34:021009瀏覽

How Do Calling Conventions Shape Function Argument Passing in C/C  ?

了解 C/C 中的呼叫約定

呼叫約定定義函數如何傳遞和接收參數及其值。 C/C 提供了多種呼叫約定,每種呼叫約定都有特定的用途。

呼叫約定的數量

C/C中有多種可用的呼叫約定,包括:

  • cdecl
  • 系統呼叫
  • pascal
  • stdca ll
  • fastcall
  • vectorcall
  • safecall
  • Microsoft X64呼叫約定

每個約定的意思

cdecl:

  • cdecl:
cdecl:

cdecl:
cdecl:

cdecl:
  • cdecl:

cdecl:

  • 堆疊上的參數.
  • 暫存器被指定用於特定目的(EAX表示回傳值,EAX、ECX、EDX 表示呼叫者儲存)。
syscall:

與 cdecl類似,但不保留具體的
  • pascal:

按從左到右的順序在堆疊上傳遞的參數。

被呼叫者負責堆清理。
  • stdcall:

被呼叫者清理堆疊。

參數按從右到左的順序推送,像 cdecl。
  • 指定內部函數使用的暫存器(EAX、ECX、 EDX)。
fastcall:

在暫存器中傳遞的前兩個參數(ECX 和 EDX)。
  • 推送的剩餘參數在堆疊上從右到左。
向量呼叫:支援使用 SIMD 暫存器傳遞向量參數。 最多六個暫存器分配給向量參數。 safecall (Delphi/Free Pascal):封裝 COM 錯誤處理。 異常在 EAX 中作為 HRESULT 返回,而結果透過引用傳遞。 Microsoft X64 通話約定:用於 Windows 和預啟動 UEFI。 在暫存器中傳遞的前四個整數/指標參數(RCX、RDX、R8、R9)。

以上是呼叫約定如何影響 C/C 中函數參數的傳遞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn