C/C の呼び出し規約を理解する
呼び出し規約は、関数が引数とその値の受け渡し方法を定義します。 C/C は、さまざまな呼び出し規約を提供しており、それぞれが特定の目的を果たします。
呼び出し規約の数
C/C では、いくつかの呼び出し規約を使用できます。含む:
- cdecl
- syscall
- pascal
- stdca ll
- fastcall
- vectorcall
- safecall
- Microsoft X64 呼び出し規約
各規約の意味
cdecl:
- スタックに渡される引数.
- レジスタは特定の目的のために指定されています (EAX戻り値の場合は EAX、ECX、呼び出し元保存の EDX)。
syscall:
- cdecl に似ていますが、特定の内容は保持されませんregisters.
pascal:
- 左から右の順序でスタックに渡されるパラメータ。
- 呼び出し先の責任スタックcleanup.
stdcall:
- 呼び出し先はスタックをクリーンアップします。
- パラメータは右から左の順序でプッシュされます。 cdecl など。
- 内部関数使用のために指定されたレジスタ (EAX、ECX、 EDX).
fastcall:
- 最初の 2 つの引数はレジスタ (ECX および EDX) に渡されます。
- 残りの引数はプッシュされますスタックの上に右から左。
vectorcall:
- SIMD レジスタを使用したベクトル引数の受け渡しをサポートします。
- 最大 6 つのレジスタベクトル引数に割り当てられます。
safecall (Delphi/Free Pascal):
- COM エラー処理をカプセル化します。
- 結果は参照によって渡されますが、例外は HRESULT として EAX に返されます。
Microsoft X64 通話規則:
- Windows およびプリブート UEFI で使用されます。
- レジスタ (RCX、RDX、R8、R9) で渡される最初の 4 つの整数/ポインター引数。
以上が呼び出し規約は C/C での関数の引数の受け渡しをどのように形成するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。