3

Java バイトコード/ソースコードの静的解析を理解しようとしています。

インターネット上で満足のいく定義を見つけることができないこれらの用語が頻繁に出てきます。

  1. コンテキスト (イン) センシティブな分析
  2. 呼び出しコンテキスト
  3. アクティブなコール サイト
  4. ポイント分析

上記の用語がJavaのコンテキストで何を意味するのか、誰でも簡単に説明してください。Googleで「文脈」「プログラミング」を検索すると、文脈依存文法、言語理論などに関する情報が表示されますが、必要な定義はありません(同じ意味でない限り)。

4

2 に答える 2

2
  • 呼び出しコンテキスト: 特定の場所でコードを分析する場合、直接の (仮定された) 呼び出し元のコード、またはより一般的には、これにつながる (仮定された) 呼び出し元のセット。

  • アクティブな呼び出しサイト: 直接の呼び出し元に焦点を当てた「呼び出しコンテキスト」のバリエーション。

  • コンテキスト依存分析: 特定の呼び出しコンテキストを考慮したコード位置でのコード プロパティの分析。このような分析を行う理由は、多くの場合、プロパティがより詳細で正確であるためです。

  • context in-sensitive analysis : 可能なすべての呼び出しコンテキストを考慮した、コードの場所の分析。これは、コンテキスト依存の分析よりも実装が容易であるためです。その欠点は、答えが正確でないことが多いことです。

  • points-to analysis : ポインター割り当てごとに、そのポインターが選択できるプログラム内のエンティティーのセットを決定する (それによってアクセスおよび更新する) 分析。多くの場合、関心のあるエンティティは、コード内の割り当てポイントのセットによって表されます。たとえば、エンティティの割り当てが発生する可能性のある各場所は、ヒープ上またはローカル ブロック内のいずれかです。

于 2012-06-11T20:06:16.480 に答える
1

Points-to Analysis(またはJavaのコンテキストでの参照分析)は、コンパイル時に、ポインターが実行時に指している可能性のあるすべてのオブジェクトを推測しようとします。これは健全ですが、おおよそです。

状況依存(CS)ポイントツー分析では、関数の分析中に関数の呼び出しコンテキストが考慮されます。以下のプログラムの場合、CSポイントツー分析は、xとzが異なるポイントツー情報を持っていることを推測できます。つまり、yとwが異なるオブジェクトを指している場合、それらは異なるオブジェクトを指します。

main() {
    x = foo(y);
    z = foo(w);
}

foo (a) {
    return a;
}

対照的に、コンテキスト非依存(CI)分析では、呼び出し元のコンテキストを区別せず、xとzがエイリアスする(または同じオブジェクトを指す)可能性があると(不正確に、しかし健全に)推測します。

呼び出しコンテキストは、現在の(現在の呼び出し)関数が表示される一連の呼び出しサイトです。この例では、fooには2つの呼び出しコンテキストがあります。1つはmainからの最初の呼び出しサイトにあり、もう1つはmainの2行目にあります。アクティブなコールサイトは、分析しているサイトです。

于 2012-06-18T16:27:18.707 に答える