在编译器数据流分析中,变量的有效范围与其到达定义之间的区别是什么?两者似乎都指的是同样的事情......
答案 0 :(得分:3)
达到定义是针对程序中的特定位置定义的。例如,在第10行中,使用代码“a = b + c”,编译器知道“c”的到达定义是什么,或者换句话说回答“在变量c获取的变量c中的什么语句”中是有用的。可以达到10行的价值?“。
实时范围是根据变量定义的。变量c的有效范围从变量c的定义开始,一直到变量的下一个定义(变量被杀死的位置,或者如果使用SSA则定义为不同的变量),或者结束变量c存在的范围(块,函数或程序)。
这两个概念是相似的,但它们不是一回事。
答案 1 :(得分:2)
它们是非常不同的东西,我建议你回去重新阅读哪些定义让你感到困惑。对于使用给定变量的点,变量的到达定义必须是该变量的定义。 变量的生命周期是可以使用它的程序的一部分,其中包括除定义之外的其他内容,例如,读取它。
例如,参见1986年的“龙书”,第534页(可能过于笼统,无济于事)和610.