呼び出し規約は C/C での関数の引数の受け渡しをどのように形成するのでしょうか?

DDD
リリース: 2024-11-12 07:34:02
オリジナル
1007 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート