ここでは、コードサイズ、局所性、およびコードの速度に影響を与えるコンパイラー・オプションについて説明します。次の表は、最も一般的なコード最適化オプションをまとめたものです。
Windows* |
Linux* |
説明 |
---|---|---|
/O3 |
-O3 |
コードの速度におけるさらに強力な最適化を有効にします。計算を実行する、または大きなデータセットを処理するループを含むコードに推奨します。 |
/O2 |
-O2 (または -O) |
コードの速度に影響を与えます。これはデフォルトオプションです。何も指定しない場合、コンパイラーはこの最適化レベルを使用します。 |
/O1 |
-O1 |
コードサイズと局所性に影響を与えます。特定の最適化を無効にします。 |
/fast |
-fast |
ランタイムのパフォーマンス用の一般的かつ推奨される最適化オプション一式を有効にします。 |
/Od |
-O0 |
最適化を無効にします。デバッグやコンパイルをすばやく行うには、このオプションを使用します。 |
次の各セクションでは、一般的な最適化について簡単に説明します。
次の表は、関連するコード最適化オプションの一覧です。また、IA-32、インテル(R) EM64T、Itanium(R) アーキテクチャーで共通の特性、および各アーキテクチャーにおける一般的な動作についても説明します。
これらのコード最適化は、アーキテクチャーおよびコンパイラー・オプションに応じて有効または無効になります。詳細は、関連するコンパイラー・オプションのトピックで説明されています。各オプションの説明には、これらのコンパイラー・オプションのトピックへのリンクが含まれています。
Windows |
Linux |
効果 |
---|---|---|
/O1 |
-O1 |
好ましいコードサイズとコードの局所性に最適化します。この最適化レベルは、分岐が多く、実行時間がループ内のコードに支配されない、非常に大きなコードサイズのアプリケーションのパフォーマンスを向上させます。一般に、この最適化レベルは次のことを行います。
ほとんどの場合は、このオプションよりも -O2 (Linux) または /O2 (Windows) を推奨します。 このオプションによって設定されるオプション、またはアーキテクチャー別およびオペレーティング・システム別の動作に関する詳細は、次のトピックを参照してください。
|
/O2 |
-O2, -O |
速度について最適化します。デフォルトの最適化レベルです。最適化レベルを指定しなかった場合、コンパイラーはこのコード最適化レベルを自動的に使用します。一般的に推奨される最適化レベルです。しかし、他のコンパイラー・オプションを指定して、このレベルで通常行われる最適化と同じ最適化を行うこともできます。 このオプションは、パフォーマンスの向上のために関数のインライン展開と次の機能を有効にします。 このオプションの動作は、アーキテクチャーによって異なります。 Itanium ベース・システム:
このオプションによって設定されるオプション、またはアーキテクチャー別およびオペレーティング・システム別の動作の詳細は、次のトピックを参照してください。
|
/O3 |
-O3 |
-O2 (Linux) または /O2 (Windows) の最適化に加えて、プリフェッチ、スカラー置換、キャッシュ・ブロッキング、ループ変換、およびメモリーアクセス変換などのより強力な最適化を有効にします。最大実行速度に最適化を行いますが、ループ変換およびメモリーアクセス変換が行われない限り、パフォーマンスが向上しない場合があります。このオプションによる最適化は、コードによっては -O2 (Linux) または /O2 (Windows) の最適化よりも遅くなります。 このオプションは、浮動小数点演算を多く使用するループや大きなデータセットを処理するループを含むアプリケーションに推奨します。 他のコード最適化オプションと同じように、このオプションの動作はアーキテクチャーおよびオペレーティング・システムによって異なります。 IA-32 システム
Itanium ベース・システム:
詳細は、次のトピックを参照してください。
|
/Ox |
対応するオプションはありません |
コンパイラー・オプションを組み合わせて最大限の最適化を有効にし、次のことを行います。 このオプションは、すべてのアーキテクチャーでサポートされています。
|
/fast |
-fast |
ランタイム・パフォーマンスを向上させる最適化機能一式をすべて有効にする、単純で単一の最適化を提供します。アーキテクチャーおよびオペレーティング・システムに固有のオプションを設定します。 Itanium ベース・システム:
IA-32 システムおよびインテル EM64T 対応システム
|
次の表は、インテル(R) コンパイラーによる最適化を制限するオプションの一覧です。
Windows |
Linux |
効果 |
---|---|---|
/Od |
-O0 |
すべての最適化を無効にします。コンパイル時間を優先する開発段階では、このオプションを使用してください。 Linux:
Windows:
詳細は、次のトピックを参照してください。
|
/Zi、/Z7 |
-g |
デバッガーで使用するため、オブジェクト・ファイルにシンボリック・デバッグ情報を生成します。 このオプションは、アーキテクチャーとオペレーティング・システムに応じて、他のコンパイラー・オプションを有効または無効にします。詳細は、次のトピックを参照してください。
|
/Op |
-mp
|
浮動小数点演算について、ANSI C 標準と IEEE 754 標準への適合性を有効にします。浮動小数点演算の精度にいくらかの正と負の影響をもたらす最適化を制限し、宣言された精度のレベルを保ち浮動小数点演算が ANSI および IEEE* 標準に準拠するようにします。詳細は、「浮動小数点演算の精度の向上と制限」を参照してください。 詳細は、次のトピックを参照してください。
|
/Oi- |
-fno-builtin |
組み込み関数のインライン展開を無効にします。 詳細は、次のトピックを参照してください。
|
対応するオプションはありません |
-fmath-errno, |
数値演算ライブラリー関数の呼び出しの後に、errno がテストされると仮定するようコンパイラーに指示します。
|
最適化を制限する詳しい方法については、「Qoption 指定子の使用」および「最適化の制限のサポート」を参照してください。
Windows |
Linux |
効果 |
---|---|---|
/Qsox |
-sox |
コンパイラー・オプションとバージョン番号を実行ファイルに保存するようにコンパイラーに指示します。リンク処理中に、リンカーは情報文字列を実行ファイル内に置きます。このオプションを使用すると、ファイルのサイズは多少増加しますが、リグレッション問題のバージョンの識別が簡単になります。 詳細は、次のトピックを参照してください。
|