コンパイラ最適化
ページ内のデータの配置を変え、時間的に近接してアクセスされるデータがキャッシュ上の同じ位置に来ないようにする。
ループ回数が同じである複数のループをまとめることでループによるオーバーヘッドを低減する。
大抵の関数型言語は、計算モデルとしてラムダ計算を採用している。しかし、ラムダ計算での式の評価は非常に複雑であり、計算機に大きな負荷をかけてしまう。対照的に、コンビネータ論理の式の評価は置換という概念が存在しないため、はるかに簡単であり計算負荷を軽減することが出来る。
時間的に近接してアクセスされるコードやデータはメモリ上で空間的にも近接していれば、空間的局所性を増大させることができる。
CISC命令セットの命令長は可変であることが多く、命令数も多く、各命令の実行間隔も一定していない。RISC命令セットでは命令長が固定で、アドレッシングモードもCISCより少なく、各命令は一定間隔で実行される(実行時間は必ずしも一定ではない)。同じ処理をコード化したときの多様さはCISCの方がRISCより豊富である。コンパイラは各命令や命令の組み合わせによるコストを考慮してコード生成する(命令選択)。
プログラムの制御の流れをグラフ表現した形式。類似の表現に、データの流れを表したデータフローグラフ (data-flow graph) などがある。
複雑でコストのかかる操作(演算)をより単純で等価なものに置き換える最適化。帰納変数解析(前述)により、ループ内のループ変数に依存した変数についてこれが行える。のぞき穴的最適化の一部もここに分類される。例えば、定数による除算を逆数の乗算に置き換えたり、乗算をビットシフトと加算で置き換えたり、(CISCの場合)大きな命令を同等機能の小さな命令に置き換えたりする。
x = y * 2 → x = y << 1 (乗算をビットシフトへ)
x += 1 → x++ (加算をインクリメントへ)
など