了解 C/C 中的呼叫約定
呼叫約定定義函數如何傳遞和接收參數及其值。 C/C 提供了多種呼叫約定,每種呼叫約定都有特定的用途。
呼叫約定的數量
C/C中有多種可用的呼叫約定,包括:
- cdecl
- 系統呼叫
- pascal
- stdca ll
- fastcall
- vectorcall
- safecall
- Microsoft X64呼叫約定
每個約定的意思
cdecl:
cdecl:
cdecl:
cdecl:
cdecl:
cdecl:
- 堆疊上的參數.
- 暫存器被指定用於特定目的(EAX表示回傳值,EAX、ECX、EDX 表示呼叫者儲存)。
-
syscall:
與 cdecl類似,但不保留具體的
按從左到右的順序在堆疊上傳遞的參數。
被呼叫者負責堆清理。
被呼叫者清理堆疊。
參數按從右到左的順序推送,像 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中文網其他相關文章!