gpt4 book ai didi

variables - 编译器如何更改变量名?

转载 作者:行者123 更新时间:2023-12-01 10:52:04 24 4
gpt4 key购买 nike

我一直在对这个主题进行一些研究,但没有找到好的具体答案。假设您的代码中有这些表达式:

B = 2

B = B + 5

B = J + B


(这些是非常简单的例子,我知道它们不现实)
B在这些行中有许多不同的值。第一行是 2 ,后来变成 7 ,以及稍后的更多内容是 7 + J .编译器需要跟踪 B 的这些不同值。 ,所以一种方法是重命名它们。例如,当 B被重新定义为 B = B+5 ,可以改为 B1 = B+5 .最后的重定义看起来像 B2 = J+B1 .

这个想法背后的动机涉及我正在构建的优化程序。它涉及用与其相关的表达式替换变量。然而,如果一个变量被重新定义,那么字符 'B' 可以同时表示多个事物。我用来跟踪事物的方法就是我上面描述的,重新定义变量名称。

这是编译器的工作方式吗?有这个名字吗?

在重新定义变量的情况下,我试图尽可能多地了解编译器重新定义变量的过程。

如果有帮助,我相信这会在编译的预处理阶段完成,我相信它与宏扩展的概念相似。

编辑:我为这个问题添加了更多背景信息。

最佳答案

您的直觉是正确的,许多现代编译器使用流分析来重命名变量,以便每个变量都是唯一的。生成的表单称为 “单一静态分配”或简称 SSA。

输入:

B = 2
B = B + 5
B = J + B

输出:
B1 = 2
B2 = B1 + 5
B3 = J + B2

还有其他部分用于处理分支和循环,例如:

输入:
if X < 5
B = Y + Z
else
B = 2
B = B + 1

输出:
if X < 5:
B1 = Y + Z
else
B2 = 2
B3 = phi(B1, B2)
B4 = B3 + 1

“phi”函数选择其输入中的任何一个是实时的。

这不是在预处理期间完成的,而是在代码被编译为一些 IR 之后完成的,通常由基本块组成。它与宏观扩展不同。

关于variables - 编译器如何更改变量名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17979834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com