2009-04-05 6 views

답변

2

그들은 매우 다른 것들이며, 당신이 돌아가서 당신을 혼란스럽게 만들었다면 다시 읽으라고 제안합니다. 주어진 변수를 사용하는 점에 대한 변수의 도달 정의는 무엇보다도 해당 변수의 정의 여야합니다. 변수의 수명은 프로그램을 읽을 수있는 부분으로, 정의를 읽지 못하는 등의 내용을 포함하고 있습니다.

참조, 예를 들어, 1986 년 드래곤 도서, 페이지 534 (아마 너무 일반적 도움이 될 수있는) 및 (610)

3

도달 정의는 프로그램의 특정 장소에 대한 정의된다. 예를 들어, 10 행에서 코드 "a = b + c"를 사용하면 컴파일러가 "c"의 도달 정의가 무엇인지 알 수 있습니다. 즉 "변수 c가 어떤 문에서 라인 10에 도달 할 수있는 가치? ".

라이브 범위는 변수를 기준으로 정의됩니다. 변수 c의 유효 범위는 변수 c의 정의에서 시작하여 변수의 다음 정의 (변수가 제거되거나 SSA를 사용하는 경우 다른 변수로 정의 됨) 또는 변수 c가 존재하는 범위 (블록, 함수 또는 프로그램).

두 개념은 비슷하지만 같은 것은 아닙니다.

+0

@ Anthony의 답변에 추가하십시오. 라이브 범위는 변수가 사용되는 프로그램 부분에 따라 달라집니다. 변수가 정의 된 후 몇 번 사용됩니다. 그런 다음 프로그램의 긴 범위에 대해 살해되기 전까지는 사용되지 않습니다. 라이브 범위에는 사용되지 않는 프로그램 부분이 포함되어야한다고 생각하지 않습니다. –

+0

crontrol 흐름 그래프를 뒤로 이동하면 해당 변수를 사용하기 전에 해당 변수와 마지막 정의 (할당) 사이의 변수로 간주됩니다. 범위 (def, def)가 아닌 범위 (def, use)입니다. 결코 사용되지 않는 변수는 백만 번 정의 될 수 있다고해도 전혀 살아있는 것으로 간주되지 않습니다. –