C/C の呼び出し規約
C/C では、引数を関数に渡す方法とその方法を決定するために、さまざまな呼び出し規約が使用されます。結果が返されます。これらの規則は、スタックまたはレジスターに引数を配置する順序と方法、およびスタックのクリーンアップの責任を決定します。
利用可能な呼び出し規則
C/C複数の呼び出し規約を提供します。以下を含みます:
-
cdecl: 引数はスタックに右から左にプッシュされ、呼び出し側で保存されたデータと呼び出し先で保存されたデータ用に指定された特定のレジスターが使用されます。
-
syscall: cdecl に似ていますが、特定のレジスタを保持せず、レジスタのサイズを渡す必要があります。パラメータ リストを明示的に指定します。
-
pascal: パラメータはスタックに左から右にプッシュされ、呼び出し先はスタックのバランスをとる責任があります。
-
stdcall: 呼び出し先がスタックのクリーンアップを処理するパスカルのバリエーションで、次のように引数が右から左にプッシュされます。 cdecl.
-
fastcall: 最初の 2 つの引数は特定のレジスタに渡され、残りの引数はスタックにプッシュされます。
-
vectorcall: SIMD を使用してベクトル引数を効率的に渡すため
-
safecall: 例外を透過的に処理するために COM (コンポーネント オブジェクト モデル) コンテキストで使用されます。
-
Microsoft X64 呼び出し規約: 標準化された規約Windows および x86-64 アーキテクチャ用のプリブート UEFI で使用され、引数と浮動小数点値に特定のレジスタを利用します。スタック処理に「シャドウ スペース」を使用します。
詳細な説明
これらの呼び出し規約の包括的な概要については、次のリソースを参照してください。
- ウィキペディア: [C 呼び出し規約](https://en.wikipedia.org/wiki/X86_calling_conventions)
- MSDN: [C コンパイラーの呼び出し規約](https://docs.microsoft.com/en-us/cpp/build) /x64-calling-convention)
- インテル: [インテル® 64 および IA-32 アーキテクチャー ソフトウェア開発者マニュアルボリューム 1: 基本アーキテクチャ](https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325383.pdf )
以上が呼び出し規約の違いは、C/C での関数の引数の受け渡しやスタックのクリーンアップにどのような影響を与えるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。