活动范围与达到定义

时间:2009-04-05 14:57:38

标签: compiler-construction range analysis definition

在编译器数据流分析中,变量的有效范围与其到达定义之间的区别是什么?两者似乎都指的是同样的事情......

2 个答案:

答案 0 :(得分:3)

达到定义是针对程序中的特定位置定义的。例如,在第10行中,使用代码“a = b + c”,编译器知道“c”的到达定义是什么,或者换句话说回答“在变量c获取的变量c中的什么语句”中是有用的。可以达到10行的价值?“。

实时范围是根据变量定义的。变量c的有效范围从变量c的定义开始,一直到变量的下一个定义(变量被杀死的位置,或者如果使用SSA则定义为不同的变量),或者结束变量c存在的范围(块,函数或程序)。

这两个概念是相似的,但它们不是一回事。

答案 1 :(得分:2)

它们是非常不同的东西,我建议你回去重新阅读哪些定义让你感到困惑。对于使用给定变量的点,变量的到达定义必须是该变量的定义。 变量的生命周期是可以使用它的程序的一部分,其中包括除定义之外的其他内容,例如,读取它。

例如,参见1986年的“龙书”,第534页(可能过于笼统,无济于事)和610.