エイリアス解析
一般的には、エイリアス解析はあるメモリ参照が同じメモリ領域を示すかどうかを判定する。 これによって、コンパイラは、ある文によりプログラム中のどの変数が影響を受けるかを知ることができる。たとえば、以下のようなintへのポインタ経由でアクセスするC言語のコードを考える。
ここで、エイリアスに3つの場合がありうる。
変数 p と q はエイリアスしない。
変数 p と q は確実にエイリアスする。
コンパイル時には、変数 p と q がエイリアスするかどうかは決定論的に判断できない。
p と q がエイリアスしないのであれば、i = *p + 3; は i = 4 に置き換えることができる。p と q が確実にエイリアスするのであれば、i = *p + 3; は i = 5 に置き換えることができる。いずれの場合も、エイリアスによる情報を元に最適化を施すことができる。一方、p と q がエイリアスするかどうか判断できない場合には、最適化を施すことができず、結果はコード全体を実行するまで得ることができない。2つのメモリ参照のエイリアスが不明の場合、「エイリアスする可能性がある」関係と呼ぶことができる。