/Ob (関数のインライン展開)
関数のインライン展開を制御します。 既定では、最適化を行うときに、展開はすべての関数でコンパイラの裁量で行われ、一般に "自動インライン展開" と呼ばれます。
構文
/Ob{0|1|2|3}
/Ob{0|1|2}
引数
0
/Od の下の既定値。 インライン展開を無効にします。
1
inline、__inline、または __forceinline としてマークされた関数の展開のみ、またはクラス宣言で定義された C++ メンバー関数にある展開のみが許可されます。
2
/O1 と /O2 の下の既定値。 インライン展開が行われないよう明示的にマークされていない関数をコンパイラで拡張できるようにします。
3
このオプションでは、/Ob2 よりも積極的なインライン展開を指定しますが、同じ制限があります。 /Ob3 オプションは、Visual Studio 2019 以降で使用できます。
解説
インライン展開に関するオプションとキーワードは、インライン展開の対象となる候補をコンパイラに示すだけです。 すべての関数がインライン展開になるという保証はありません。 インライン展開は無効にすることができますが、__forceinline
キーワードを使用しても、特定の関数のインライン展開をコンパイラに強制することはできません。
関数をインライン展開の候補対象から除外するには、__declspec(noinline) を使用するか、#pragma auto_inline(off) ディレクティブと #pragma auto_inline(on) ディレクティブによってマークされたリージョンを使用できます。 インライン展開のヒントをコンパイラに提供する別の方法に関する情報については、#pragma intrinsic ディレクティブを参照してください。
Note
プロファイル テストの実行から収集された情報は、/Ob、/Os、または/Ot を指定したために有効になる最適化をオーバーライドします。 詳細については、「ガイド付き最適化のプロファイル」を参照してください。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[最適化] プロパティ ページを選択します。
[インライン関数の展開] プロパティを変更します。
/Ob3 オプションは [インライン関数の展開] プロパティでは使用できません。 /Ob3 を設定するには、次のようにします。
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。
[追加オプション] に「/Ob3」と入力します。
このコンパイラ オプションをコードから設定するには
- 以下を参照してください。InlineFunctionExpansion