このドキュメントで説明するソフトウェアは、Extended SupportまたはSustaining Supportのいずれかにあります。 詳細は、https://www.oracle.com/us/support/library/enterprise-linux-support-policies-069172.pdfを参照してください。
Oracleでは、このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお薦めします。
-O level
オプションをgccに指定するとコンパイラの最適化が有効になり、level
の指定値によって次の結果をもたらします。
- 0
デフォルトではコンパイル時間が短縮され、デバッグにより常に予期された結果が生成されるようになります。 このレベルは、-Oオプションをまったく指定しない場合と同じです。 ただし、いくつかの最適化オプション(-falign-loops、-finline-functions-called-once、-fmove-loop-invariantsなど)は有効な状態です。
- 1
コンパイラは、出力バイナリ・コードのサイズと実行速度の両方を低減しようとしますが、コンパイル時間を大幅に増大させる可能性のある最適化は実行しません。
- 2
コンパイラは、容量と速度のトレードオフが必要ない最適化を実行します。 レベル1の最適化と比べて、レベル2の最適化では出力バイナリのパフォーマンスは向上しますが、コンパイル時間も増大します。
- 3
コンパイラは、-fgcse-after-reload、-finline-functions、-fipa-cp-clone、-fpredictive-commoning、-ftree-vectorizeおよび-funswitch-loopsの各オプションを有効にするので、レベル2の最適化に加えて、容量と速度のトレードオフが必要になります。
- s
コンパイラは、実行速度ではなくバイナリのサイズを削減する最適化を行います。
最適化オプションを指定しないと、gccはコンパイル時間を短縮して、デバッグにより常にソース・コードの読取りから予期される結果が生成されるようにします。 最適化を有効にすると、コンパイラはパフォーマンスの向上または出力バイナリ・サイズの削減、あるいはその両方を試みますが、コンパイル時間が増加してプログラムを効率的にデバッグできなくなる可能性があります。 複数のソース・ファイルをまとめて1つの出力バイナリ・ファイルにコンパイルする場合、コンパイラは個々のソース・ファイルをコンパイルするときに、すべてのソース・ファイルから収集した情報を使用します。
次のコマンドを使用すると、指定された最適化レベルで有効になっている最適化オプションを確認できます。
$ gcc -c -Q -Olevel
--help=optimizers
コンパイル速度を向上させるには、-pipeオプションを指定して、様々なコンパイル・ステージ間の通信に一時ファイルではなくパイプを使用するようにgccに指示できます。
ターゲット・プラットフォーム固有のハードウェア・プロパティを利用すると、パフォーマンスを大幅に向上させることができます。 デフォルトで、GCCはほとんどのプロセッサ用に最適化されたコードをコンパイルします。 ただし、gccで-mtuneオプションと-marchオプションを使用すると、命令のスケジュールと命令セットの選択をそれぞれ最適化できます。 -marchにアーキテクチャを指定すると、-mtuneの値が暗黙に選択されます(ただし、値を明示的に指定した場合を除く)。 -mtuneに無効な値を指定した場合、使用中のプログラムは最適ではないながらも動作し続けることはできますが、-marchに無効な値を指定した場合は失敗する可能性があります。 詳細は、gcc(1)
マニュアル・ページおよび『GCC 4.4.4 Manual: Hardware Models and Configurations』を参照してください。