2009-04-05 7 views
4

В анализе потока данных компилятора, в чем разница между диапазоном живого диапазона переменной и достижением определения? Оба, похоже, ссылаются на одно и то же ...Live Range vs Reaching Definitions

ответ

2

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

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

3

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

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

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

+0

Чтобы добавить к ответу @ Энтони. Живой диапазон также зависит от той части программы, в которой используется переменная. Если переменная определена, а затем используется несколько раз. Затем для большого диапазона программы он не используется до тех пор, пока он не будет убит. Я не думаю, что живой диапазон должен включать часть программы, в которой он не используется. –

+0

Прогуливаясь по графику потока crontrol в обратном направлении, переменная считается живой между использованием этой переменной и ее последним определением (назначением) до этого использования. Это диапазон (def, use), а не диапазон (def, def). Переменная, которая никогда не используется, вообще не считается живой, хотя ее можно определить миллион раз. –