ゆうき@甲府 です。
以下、man gcc より抜粋しました。
>>>>出典:man-pages-ja-0.5-0.20000815.1 / RHL7J
>>>>(/usr/share/man/ja/man1/gcc.1.gz)
======================(ここから)=============================
GCC(1) GNU Tools GCC(1)
名称
gcc, g++ - GNU プロジェクト C コンパイラ および C++ コンパ
イラ (v2.4)
:
(:中略)
:
最適化オプション
これらのオプションは様々な種類の最適化処理を制御します。
-O
-O1 最適化を行います。最適化コンパイルは幾分長めの処 理
時 間と、大きな関数に対する非常に多くのメモリを必要
とします。 `-O' が指定されなかった場合は、コンパ イ
ラ の目標はコンパイルのコストを低減することや、目的
の結果を得るためのデバッグを可能とすることに置か れ
ま す。それぞれの文は独立しています。つまり、ブレー
クポイントでプログラムを停止させることによって、 任
意 の変数に新しい値を代入したり、プログラムカウンタ
を他の文へと変更することを可能とし、そのソースコ ー
ド にプログラマが望む正しい結果を得ることを可能にし
ます。 `-O' を指定しなかった場合は、register と宣言
し た変数のみがレジスタへと割り当てられます。コンパ
イルの結果として得られるコードは、PCC を `-O' な し
で 使 用 した場合と比較して若干良くないものとなりま
す。 `-O' が指定されると、コンパイラはコードのサ イ
ズ と実行時間を減少させることを試みます。 `-O' を指
定 す る こ と に よっ て、 `-fthread-jumps' と
`-fdelayed-branch' のフラグが指定されます。いくつか
のマシンではさらにその他のフラグが指定されます。
-O2 さらに最適化を行います。ほとんどのサポートされて い
る 最適化手段のうち、空間と速度のトレードオフを含ま
ないものは全て使用されます。 -O, と比較して、このオ
プ ションはコンパイル時間と生成コードの性能の双方を
増加させ ま す。 -O2 は、 -funroll-loops, -fun-
roll-all-loops , そして -fomit-frame-pointer 以外の
全ての -fflag オプションを有効化し、さらに強力な 最
適化を可能にします。
-O0 最 適化を行いません。複数の -O オプションを指定した
場合は、レベル番号の有無に関わらず、最後に指定し た
ものが有効になります。
(:中略)
日本語訳
細川 達己(hosokawa _at_ mt.cs.keio.ac.jp)
======================(ここまで)=============================
=>・要するに、コードの実行速度/サイズと、デバッグ効率のどちらを
優先させるか。ってことなんでしょうかね。
・その昔、コンパイラの最適化ってあまりあてにならなくて苦労した
方々も多いはず。・・・・最近はそんなことないでしょうけど。
・そういえば、本番用なのに "-g" オプションを強要させるってのは
やっぱりこの部分のロジックに依存していたためなんだろうか。
(>>>>例えば、gcc 本体なんか。とか。)
tyuuki _at_ yukia.co.jp