コンパイラ組み込み

ライブラリでは、ほとんどの機能が含まれていますが、一部の機能が組み込まれている (つまり、組み込み) コンパイラにします。これらはする組み込み関数または組み込み関数と呼ばれます。

解説

関数が、組み込みの場合は、その関数のコードはインラインで挿入を通常は、関数呼び出しのオーバーヘッドを回避し、その関数の出力には、高効率の機械語命令を許可です。いくつかの最適化を使用可能にすることができます、オプティマイザーの動作をどのように多くの組み込み関数は、組み込みの知識があるため、組み込み、等価のインライン アセンブリよりも高速化がない利用可能なインライン アセンブリを使用するとします。また、オプティマイザー、組み込み異なる展開、バッファーを異なる方法で、整列したり他のコンテキストと、呼び出しの引数に応じて調整を行います。

Visual C で使用できる組み込み関数は、コードの他のコンパイラでコンパイルし、一部ターゲット アーキテクチャを利用できる可能性がありますいくつかの組み込み関数がすべてアーキテクチャを利用できない場合は使用できないため、組み込み関数の使用は、コードの移植性に影響します。ただし、組み込みはインライン アセンブリよりも通常よりポータブルです。64 ビット アーキテクチャではインライン ・ アセンブリはサポートされていません、組み込み関数が必要です。

一部の組み込み関数など__assumeと__ReadWriteBarrier、コンパイラは、オプティマイザーの動作に影響する情報を提供します。

一部の組み込み関数は組み込みとしてのみ使用できますあり両方関数と組み込みの実装では使用できないもの。すべての組み込み関数を有効にするコンパイラでは、特定の機能のみを有効にするかどうかに応じて、2 つの方法のいずれかの組み込みの実装を使用するように指定できます。The first way is to use #pragma intrinsic(intrinsic-function-name-list).プラグマ固有の単一またはコンマで区切られた複数の組み込み関数を指定する使用できます。2 つ目を使用することを /Oi (組み込み関数の生成) コンパイラ オプションは、すべての組み込み関数が特定のプラットフォームで利用します。/Oi、使用#pragma function(intrinsic-function-name-list)を組み込みの代わりに使用する関数の呼び出しを強制的にします。場合は、特定の組み込みのドキュメントをメモ ルーチンはのみを組み込みとして利用可能です、かどうかに関係なく、組み込みの実装を使用**/Oi**または#pragma intrinsic です。いずれの場合も、 /Oiまたは#pragma intrinsicが、組み込みを使用すると、オプティマイザーはため強制的されません。オプティマイザーは、関数を呼び出すことができます。

いくつか標準の C および C++ ライブラリ関数は、組み込みの実装では、一部のアーキテクチャで利用できます。場合は、CRT 関数を呼び出すときは、組み込みの実装が使用されます**/Oi**コマンド ・ ラインで指定します。

ヘッダー ファイル Intrin.h は、組み込み関数のプロトタイプ宣言しています。また、特定の Windows ヘッダーは、コンパイラの組み込みにマップする関数を宣言します。

利用可能なさまざまなアーキテクチャのすべての組み込み関数を次に示します。特定のプロセッサで、組み込みのしくみの詳細については、参照マニュアルを参照してください。

参照

関連項目

C++ のキーワード

その他の技術情報

ARM アセンブラー リファレンス

Microsoft Macro Assembler リファレンス

C ランタイム ライブラリ リファレンス