/Og (グローバルの最適化)

削除されました。 ローカルとグローバルの最適化、自動レジスタ割り当て、およびループの最適化を提供します。 代わりに、/O1 (サイズの最小化) または /O2 (実行速度の最大化) を使用することをお勧めします。

構文

/Og

解説

/Og は非推奨とされます。 最適化を有効にすると、これらの最適化は既定で有効になるようになっています。 最適化について詳しくは、「/O1/O2 (サイズの最小化、実行速度の最大化)」または「/Ox (ほとんどの速度の最適化を有効にする)」をご覧ください。

次の最適化は、/Og で使用できます。

  • ローカルとグローバルでの共通部分式の削除

    この最適化では、共通部分式の値が 1 回計算されます。 次の例では、bc の値が 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;
    }
    

    ループの最適化は、エイリアシングがないものとコンパイラが想定できるときは、はるかに効果的になります。これは、__restrictnoalias、または restrict を使用して設定します。

    Note

    optimize プラグマを g オプションと共に使用すると、関数ごとにグローバル最適化を有効または無効にすることができます。

関連情報については、「/Oi (組み込み関数の生成)」と「/Ox (ほとんどの速度の最適化を有効にする)」をご覧ください。

Visual Studio 開発環境でこのコンパイラ オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。

  2. [構成プロパティ]>[C/C++]>[コマンド ライン] プロパティ ページを選択します。

  3. [追加のオプション] ボックスにコンパイラ オプションを入力します。

このコンパイラ オプションをコードから設定するには

関連項目

MSVC コンパイラ コマンド ラインの構文