Живой диапазон против достижения определений - PullRequest
4 голосов
/ 05 апреля 2009

В анализе потоков данных компилятора, в чем разница между действительным диапазоном переменной и ее определением? Кажется, что оба они относятся к одному и тому же ...

Ответы [ 2 ]

3 голосов
/ 06 апреля 2011

Достигнутые определения определены в отношении определенного места в программе. Например, в строке 10 с кодом «a = b + c» для компилятора полезно знать, что такое достигающее определение «c», или другими словами ответить на вопрос «в каком утверждении переменная c получила значение, которое может достигать строки 10? ".

Живой диапазон определяется относительно переменной. Действительный диапазон переменной c начинается с определения переменной c и продолжается до следующего определения переменной (в которой место уничтожается или определяется как другая переменная, если вы используете SSA) или до конца область (блок, функция или программа), в которой существует переменная c.

Эти два понятия похожи, но это не одно и то же.

2 голосов
/ 07 апреля 2009

Это очень разные вещи, и я предлагаю вам вернуться и перечитать те определения, которые вас смущают. Достигнутое определение переменной для точки, которая использует данную переменную, должно быть, помимо прочего, определением этой переменной. Время жизни переменной - это часть программы, в которой она может использоваться, которая включает в себя другие вещи, кроме определений, например, ее чтение.

См., Например, Книгу Дракона 1986 года, страницы 534 (возможно, слишком общие, чтобы быть полезными) и 610.

...