エイリアス解析

From Wikipedia, the free encyclopedia

エイリアス解析(エイリアスかいせき、: alias analysis)は、コンパイラ理論における手法の1つで、ある記憶域が複数の箇所からアクセスされるかどうかを判定する方法である。2つのポインタ(あるいは参照)が同じ記憶域を参照している場合、「エイリアスされている」(aliased) とみなされる。日本語では「(同じ実体に対する)別名となっている」とも訳せる。

エイリアス解析は通例制御フロー認識とコンテキスト認識に分類される。 エイリアスする可能性があるものと、確実にエイリアスしているものを特定することができる。 エイリアス解析という用語はポインタ解析と同義で用いられることもある。

一般的には、エイリアス解析はあるメモリ参照が同じメモリ領域を示すかどうかを判定する。 これによって、コンパイラは、ある文によりプログラム中のどの変数が影響を受けるかを知ることができる。たとえば、以下のようなintへのポインタ経由でアクセスするC言語のコードを考える。

int* p;
int* q;
int i;

/* この時点でポインタ p と q は NULL でも不定値でもなく、何か有効なアドレスを指しているものとする */

*p = 1;
*q = 2;
i = *p + 3;

ここで、エイリアスに3つの場合がありうる。

  1. 変数 pq はエイリアスしない。
  2. 変数 pq は確実にエイリアスする。
  3. コンパイル時には、変数 pq がエイリアスするかどうかは決定論的に判断できない。

pq がエイリアスしないのであれば、i = *p + 3; は i = 4 に置き換えることができる。pq が確実にエイリアスするのであれば、i = *p + 3;i = 5 に置き換えることができる。いずれの場合も、エイリアスによる情報を元に最適化を施すことができる。一方、pq がエイリアスするかどうか判断できない場合には、最適化を施すことができず、結果はコード全体を実行するまで得ることができない。2つのメモリ参照のエイリアスが不明の場合、「エイリアスする可能性がある」関係と呼ぶことができる。

エイリアス解析を行う

参考文献

関連項目

Related Articles

Wikiwand AI