ポインタ解析
表示
ポインタ解析(ポインタかいせき、英: pointer analysis / points-to analysis)は、計算機科学における静的コード解析の技法のひとつで、ポインタやヒープへの参照がどの変数や記憶領域を指し示す可能性があるかを明らかにするものである。ポインタ解析はしばしば、より複雑なエスケープ解析などの解析手法の一部として用いられる。ポインタ解析を一般化したものがシェープ解析である。
概要
[編集]ポインタ解析をごく小規模なプログラムを除く大半のプログラムに適用することは、膨大な計算機資源を必要とする。このオーバーヘッドを減らすため、さまざまな方法の簡略化が行われてきたが、簡略化による問題として、求められた被参照オブジェクトの集合が実際より大規模になることがある。
簡略化の方法として、下記のものがある。
- 構造化されたオブジェクトへのすべての参照をひとつのオブジェクトに対するものとして扱う。
- どのオブジェクトがポインタに割り当てられるかを解析する際、制御のフローを無視する。
- コンテキストを無視したポインタ解析: context-insensitive pointer analysis(関数呼び出しが行われる際のコンテキストを無視する場合)
- フローを無視したポインタ解析: flow-insensitive pointer analysis(関数内の制御フローを無視する場合)
アルゴリズム
[編集]- アンダーソンのアルゴリズム
- 二分決定図