/Og
(グローバルの最適化)
削除されました。 ローカルとグローバルの最適化、自動レジスタ割り当て、およびループの最適化を提供します。 代わりに、/O1
(サイズの最小化) または /O2
(実行速度の最大化) を使用することをお勧めします。
構文
/Og
解説
/Og
は非推奨とされます。 最適化を有効にすると、これらの最適化は既定で有効になるようになっています。 最適化について詳しくは、「/O1
、/O2
(サイズの最小化、実行速度の最大化)」または「/Ox
(ほとんどの速度の最適化を有効にする)」をご覧ください。
次の最適化は、/Og
で使用できます。
ローカルとグローバルでの共通部分式の削除
この最適化では、共通部分式の値が 1 回計算されます。 次の例では、
b
とc
の値が 3 つの式の間で変わらない場合、コンパイラはb + c
の計算を一時変数に代入して、その変数をb + c
に使用できます。a = b + c; d = b + c; e = b + c;
ローカルの共通部分式の最適化では、コンパイラは、コードの短いセクションで共通部分式を調べます。 グローバルの共通部分式の最適化では、コンパイラは、関数全体で共通部分式を検索します。
自動レジスタ割り当て
この最適化を使用すると、コンパイラは、頻繁に使用される変数と部分式をレジスタに格納できます。
register
キーワードは既定では無視され、/std:c++17
以降では診断が行われます。ループの最適化
この最適化は、ループの本体から不変部分式を削除します。 最適なループには、ループの実行ごとに値が変化する式だけが含まれます。 次の例では、式
x + y
はループ本体において変化しません。i = -100; while( i < 0 ) { i += x + y; }
最適化後の
x + y
は、ループが実行されるたびではなく、1 回だけ計算されます。i = -100; t = x + y; while( i < 0 ) { i += t; }
ループの最適化は、エイリアシングがないものとコンパイラが想定できるときは、はるかに効果的になります。これは、
__restrict
、noalias
、またはrestrict
を使用して設定します。Note
optimize
プラグマをg
オプションと共に使用すると、関数ごとにグローバル最適化を有効または無効にすることができます。
関連情報については、「/Oi
(組み込み関数の生成)」と「/Ox
(ほとんどの速度の最適化を有効にする)」をご覧ください。
Visual Studio 開発環境でこのコンパイラ オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。
[追加のオプション] ボックスにコンパイラ オプションを入力します。
このコンパイラ オプションをコードから設定するには
- 以下を参照してください。AdditionalOptions