在编译器数据流分析中,变量的有效范围和达到定义之间有什么区别?两者似乎指的是同一件事......
dodger
问问题
2417 次
2 回答
5
到达定义是针对程序中的特定位置定义的。例如,在第 10 行,使用代码“a = b + c”,编译器可以知道“c”的到达定义是什么,或者换句话说,回答“变量 c 在什么语句中获得 a可以达到第 10 行的值?”。
生存范围是相对于变量定义的。变量 c 的有效范围从变量 c 的定义开始,一直到变量的下一个定义(如果您使用的是 SSA,变量在该位置被杀死,或者定义为不同的变量),或者变量 c 存在的范围(块、函数或程序)。
这两个概念相似,但它们不是一回事。
于 2011-04-06T19:41:47.780 回答
2
它们是非常不同的东西,我建议你回去重新阅读任何让你感到困惑的定义。使用给定变量的点的变量的到达定义必须是该变量的定义。变量的生命周期是程序中可以使用它的部分,包括定义以外的东西,例如读取它。
例如,参见 1986 年的《龙之书》,第 534 页(可能过于笼统而无济于事)和第 610 页。
于 2009-04-07T16:53:17.033 回答