最適化
出典: フリー百科事典『ウィキペディア(Wikipedia)』
最適化(さいてきか)とは、コンパイラが出力する目的言語(機械語・バイトコードなど)の実行効率を上げたり、サイズを小さくするために行う動作のことである。
最適化はソース言語(プログラミング言語)に近い表現の中間語に対して行う高水準最適化と、機械語に近い表現の中間語に対して適用される低水準最適化に分類される。
[編集] 各種最適化
- 自動並列化
- 定数の畳み込み(constant folding)
- コンパイル時に決定できる計算を事前に行って、コードに埋め込むことで効率を上げる。
- 命令の置き換え
- x=y*2 → x=y<<1
- x+=1 → x++
- など
- CPU固有命令の使用
- 関数の展開(inline expansion)
- インライン展開・再帰呼び出しのループヘの変換で呼び出しのオーバーヘッドを削減する。また、定数を引数として渡している場合は前述の定数の畳み込みを行えるようになる場合もある。インライン展開の逆の最適化として、コードの一部を関数として括り出すアウトライン化(outlining)がある。
- 流れ解析(flow analysis)
- 最適化の際に必要となる情報を得るためのコード解析。コードの動きを解析する制御フロー解析(control flow analysis)と、データの流れを解析するデータフロー解析(data flow analysis)がある。
- 共通式削除(common sub-expression elimination)
- 同じ計算が2度以上ある場合は結果を保存しておく。類似の最適化に、複数ある制御パスの一部に同じ計算があるケースで共通化を行う、部分冗長性削除(partial redundancy elimination)がある。
- 死コード削除(dead code elimination)
- 実行されないコードを削除する。