
134
7 章 ホットな文を最適化する
したがって、デスクトップコンピュータ用に設計されたプログラムでは、文レベルの最適化は、
頻繁に呼び出されるライブラリ関数や常に実行されるゲーム用グラフィックエンジンやプログラミ
ング言語インタープリタの一番深いループにしか有効でない。
文レベルの最適化の問題点は、最適化の効率がコンパイラ依存であることだ。コンパイラによっ
て同じ
C++
文でも複数のコードが生成されることがある。あるコンパイラでコーディングイディ
オムが性能改善しても他のコンパイラでは良い結果が出なかったり、遅くなることすらある。
GCC
を使うときに性能を改善した技法が、
Visual C++
ではうまくいかないことがある。もっと困
るのは、コンパイラを新バージョンに更新すると、せっかく注意深く性能を向上させたコードの最
適化がうまくいかなくなることがある。これは、文レベル最適化が他の種類の性能改善作業より成
果が乏しくなるもう
1
つの理由だ。
7.1
ループからコードを取り除く
ループは、繰り返し実行される制御下の文のブロックと何回繰り返すかを決める制御節の
2
つ
の部分からなる。
C++
文から計算を取り除くという一般的な方式はループの制御下の文に適用さ
れる。ループでは、制御節がある意味でオーバーヘッドなので、最適化の可能性がある。
例
7-1
の
for
ループでは、文字列を走査して空白文字をアスタリスクに代える。
例
7-1
最適化されていない
for
ループ
char s[] = "This string has many ...