考虑以下代码:
int main() {
int a = 0;
int b = 1;
for (int i = 0; i < 3; i++) {
a = 2;
int c = 1;
int d = 3;
d = a + c;
}
a = b+2;
}
在上面的代码段中,三个变量的生命周期包含在循环体中(i
,c
和d
)。我希望能够使用LLVM计算任何给定循环体中存在寿命的变量(即对于此循环,我的代码应该返回3)。
我找到Live Variables Analysis,但我无法使用它来查找我上面描述的内容。
答案 0 :(得分:1)
也许这只是一个评论,但我无法在线表达代码:
循环体中只有两个变量具有持续时间。我在循环开始之前声明,并持续到循环体的最后一次执行之后。换句话说,c和d被构造/破坏3次;在他们第三次被毁坏之后,我就是。
因此,您编写的for循环等同于:
{
int i = 0;
while (i < 3)
{
a = 2;
int c = 1;
int d = 3;
d = a + c;
}
i++;
}
额外的括号组调用块范围;我超出了范围并在for循环体之外被破坏,但在任何后续代码之前。