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

更新 : 2007 年 11 月

ローカルおよびグローバルな最適化、自動レジスタ割り当て、およびループ最適化を行います。使用は推奨されていません。

/Og

解説

使用できる最適化は次のとおりです。

  • ローカルおよびグローバルの共通部分式の削除

    この最適化を行うと、共通部分式の値が 1 回だけ計算されます。次の例では、3 つの式の間で b と c の値が変更されない場合、b + c の計算結果がテンポラリ変数に代入され、b + c の代わりにこのテンポラリ変数が使用されます。

    a = b + c;
    d = b + c;
    e = b + c;
    

    共通部分式をローカルに最適化すると、コンパイラは短いコード セクション内で共通の部分式を探します。グローバルに最適化すると、すべての関数に共通の部分式を探します。

  • 自動レジスタ割り当て

    この最適化を行うと、頻繁に使う変数および部分式がレジスタに格納されます。register キーワードは無視されます。

  • ループの最適化

    ループを最適化すると、不変の部分式がループ本体から削除されます。最適化したループには、ループを実行するたびに値が変わる式だけが残ります。次の例では、式 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 で設定します。

    1yk3ydd7.alert_note(ja-jp,VS.90).gifメモ :

    optimize プラグマに g オプションを指定すると、グローバルな最適化の有効/無効を関数ごとに切り替えることができます。

/Og では、名前付き戻り値の最適化も有効になります。この最適化では、スタック ベースの戻り値のコンストラクタとデストラクタがコピーされません。詳細については、「/O1、/O2 (プログラム サイズ、実行速度)」を参照してください。

関連情報については、「/Oi (組み込み関数の生成)」、および「/Ox (最大限の最適化)」を参照してください。

Visual C++ 2005 では、/Og の使用は推奨されていません。代わりに /O1 または /O2 を使用してください。詳細については、「Visual C++ 2005 で使用を推奨されていないコンパイラ オプション」を参照してください。

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

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。詳細については、「方法 : プロジェクト プロパティ ページを開く」を参照してください。

  2. [C/C++] フォルダをクリックします。

  3. [コマンド ライン] プロパティ ページをクリックします。

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

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

参照

参照

/O オプション (コードの最適化)

コンパイラ オプション

コンパイラ オプションの設定