2009-04-05 14 views

答えて

2

これは非常に異なるものです。私は、あなたが混乱してしまったあなたに戻って再読することをお勧めします。与えられた変数を使用するポイントの変数の到達定義は、とりわけ、その変数の定義でなければなりません。 変数の存続期間は、プログラムを使用できる部分です。定義以外のもの(例えば、読み込み中)が含まれます。

を参照してください、例えば、1986ドラゴンブックは、ページ534(おそらく、あまりにも一般的には有用であること)と610

3

到達定義は、プログラム内の特定の場所に関連して定義されています。たとえば、コード "a = b + c"の10行目では、コンパイラが "c"の到達定義が何であるかを知ることができます。つまり、変数cがどの文でライン10に到達できる値? "

ライブ範囲は変数に対して定義されます。変数cの有効範囲は、変数cの定義から始まり、変数の次の定義(変数が強制終了される場所、またはSSAを使用する場合は別の変数として定義されます)、または変数cが存在する範囲(ブロック、関数、またはプログラム)。

2つの概念は似ていますが、同じものではありません。

+0

@ Anthonyの答えに追加します。ライブレンジは、変数が使用されているプログラムの部分にも依存します。変数が定義されてから数回使用される場合。それから、プログラムの長い範囲では、殺されるまでは使用されません。ライブの範囲には、使用されていない部分のプログラムを含めるべきではないと思います。 –

+0

crontrolフローグラフを後方に移動すると、その変数を使用する前にその変数と最後の定義(割り当て)の間で変数が生きていると見なされます。範囲(def、def)でない範囲(def、use)です。一度も使われていない変数は、何百万回も定義されていても、生きているとはみなされません。 –

関連する問題