O

アプリケーションのコードの最適化を指定します。

IDE オプション

Windows: [C/C++] > [Optimization (最適化)] > [Optimization (最適化)]

Linux: [General (全般)] > [Optimization Level (最適化レベル)]

Mac OS: [General (全般)] > [Optimization Level (最適化レベル)]

アーキテクチャー

IA-32、インテル(R) EM64T、インテル(R) Itanium(R) アーキテクチャー

構文

Linux* および Mac OS*: -O[n]
Windows*:  /O[n]

引数

n 最適化レベル。設定可能な値は、1、2、または 3 です。Linux および Mac OS システムでは、0 も指定できます。

デフォルト

O2 速度について最適化します。このデフォルトは、指定されているコンパイラーに応じて変更されます。詳細は、下記を参照してください。

説明

このオプションは、アプリケーションのコードの最適化を指定します。

オプション 説明
O (Linux および Mac OS) O2 を指定した場合と同じです。
O0 (Linux および Mac OS) すべての最適化を無効にします。IA-32 およびインテル EM64T 対応システムでは、このオプションは -fp オプションおよび -fmath-errno オプションを設定します。
O1 速度の最適化を有効にし、コードサイズを大きくするだけで高速化に影響を与えるような一部の最適化を無効にします。
コードのサイズを制限するために、このオプションは次のことを行います。
  • グローバルな最適化を有効にします。データフローの解析、コードの移動、ストレングス・レダクションとテストの置換、スプリット・ライフタイムの解析、および命令スケジューリングが含まれます。
  • 組み込み関数の認識と組み込み関数のインライン化を無効にします。
  • Itanium ベース・システムでは、ソフトウェアのパイプライン化、ループのアンロール、およびグローバル・コード・スケジューリングを無効にします。
インテル Itanium プロセッサーでは、このオプションは、サーバー・アプリケーションの最適化も有効にします (フラット・プロファイルの直列型コードおよび分岐型コード)。
O1
オプションは、次のオプションを設定します。
  • IA-32 の Linux および Mac OS システムとインテル EM64T 対応 Linux システム:
    -unroll0
    -fno-builtin-mno-ieee-fp-fomit-frame-pointer ( -fp と同じ)、-ffunction-sections
  • Itanium ベース Linux システム:
    -unroll0
    -fbuiltin-mno-ieee-fp-fomit-frame-pointer (-fp と同じ)、-ffunction-sections
  • IA-32 Windows システム:
    /Qunroll0
    /Oi-/Op-/Oy/Gy/Os/GF (/Qvc7 およびそれ以上)、/Gf (/Qvc6 およびそれ以下)、/Ob2/Og

  • インテル EM64T および Itanium ベースの Windows システム:
    /Qunroll0
    /Oi-/Op-/Gy/Os/GF (/Qvc7 およびそれ以上)、/Gf (/Qvc6 およびそれ以下)、/Ob2/Og

O1 オプションは、分岐が多く、実行時間がループ内のコードに支配されない、非常に大きなコードサイズのアプリケーションでパフォーマンスを向上させます。
O2 速度の最適化を有効にします。一般的に推奨される最適化レベルです。
Itanium ベース・システムでは、このオプションは、グローバル・コード・スケジューリング、ソフトウェアのパイプライン化、プレディケーション、およびスペキュレーションを含む速度の最適化を有効にします。
このオプションは、次の機能も有効にします。
  • 組み込み関数のインライン展開

  • 次の項目を含む、イントラファイルのプロシージャー間の最適化:

    • インライン展開

    • 定数の伝播

    • 先行代入

    • ルーチン属性の伝播

    • 変数アドレスの解析

    • 不要なスタティック関数の排除

    • 未参照変数の削除

  • また、パフォーマンスの向上のために次の機能も有効にします。

    • 定数の伝播

    • コピーの伝播

    • 不要コードの排除

    • グローバルレジスター割り当て

    • グローバル命令スケジューリングおよびスペキュレーション・コントロール

    • ループのアンロール

    • コード選択の最適化

    • 部分冗長の排除

    • ストレングス・レダクション/誘導変数の簡略化

    • 変数名の変更

    • 例外処理の最適化

    • 末端再帰

    • ピープホールの最適化

    • 構造体代入の低下および最適化

    • 不要ストアの排除

Linux および Mac OS システムでは、このオプションは O オプションです。
O2
オプションは、次のオプションを設定します。
  • Windows IA-32 システム:
    /Og、/Oi-、/Os、/Oy、/Ob2、/GF
    (/Qvc7 およびそれ以上)、/Gf (/Qvc6 およびそれ以下)、/Gs、/Gy

  • インテル EM64T 対応 Windows システム:
    /Og、/Oi-、/Os、/Ob2、/GF
    (/Qvc7 およびそれ以上)、/Gf (/Qvc6 およびそれ以下)、/Gs、/Gy

O3 O2 の最適化に加えて、プリフェッチ、スカラー置換、ループ変換、およびメモリーアクセス変換などのより強力な最適化を有効にします。次のような、速度を最大限にする最適化を有効にします。
  • 命令スケジューリングを含むループのアンロール

  • コードを反復して、分岐を排除

  • 次元が 2 のべき乗となる配列のサイズをパディングして、キャッシュの使用効率を向上

Windows システムでは、O3 オプションは /GF (/Qvc7 およびそれ以上)、/Gf (/Qvc6 およびそれ以下)、/Ob2 オプションを設定します。

Linux および Mac OS システムでは、O3 オプションは -fp オプションを設定します。

IA-32 およびインテル EM64T 対応プロセッサーで、O3 オプションを -ax または -x (Linux)、/Qax または /Qx (Windows) オプションと組み合わせて使用すると、O2 よりも詳細にデータの依存性を分析します。そのため、コンパイル時間が長くなる場合があります。
Itanium ベース・システムでは、O3 オプションは技術計算を行うアプリケーション (ループを多用するコード) の最適化、つまりループとデータ・プリフェッチの最適化を有効にします。

O3 の最適化は、ループ変換およびメモリーアクセス変換が行われない限り、パフォーマンスが向上しないことがあります。場合によっては、O2 の最適化よりも遅くなります。
O3
オプションは、浮動小数点演算を多用するループや大きなデータセットを処理するループを含むアプリケーションに推奨します。

コマンドラインで最後に指定した O オプションは、その前に指定した他のオプションよりも優先されます。

O で設定されるオプションは、バージョンによって変更される場合があります。

代替オプション

O0 Linux および Mac OS: なし
Windows: /Od