gpt4 book ai didi

c - 寄存器和临时寄存器有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:26 24 4
gpt4 key购买 nike

Valgrind 使用中间代码表示让我们检测二进制代码,这样我们就不必处​​理编程语言级别的构造。在将二进制代码转换为 Valgrind 的中间表示 (IR) 代码的过程中,它显示了使用寄存器进行加法等操作。其中有 1024 个正在使用。我没有得到的是另一种类型的寄存器,称为临时寄存器,表示为 tX,其中 X 是某个数字。因此,我可以看到:

t28 = Add32(t26,0xFFFFFFFC:I32)
t4 = LDle:I32(t28)

t 表示临时寄存器。据我所知,它们的行为似乎与常规寄存器非常相似,但无法弄清楚它们有何不同。谁能告诉我临时寄存器是什么以及它与常规寄存器有何不同?

最佳答案

在编译器构造课上,我被教导中间代码中的寄存器是虚拟寄存器。它们不一定与目标平台的可执行文件有任何关系。它们可以是真正的 CPU 寄存器,也可以是内存中的临时寄存器。这完全取决于代码生成器和优化器。代码生成器决定临时文件的分配位置。

生成 IR 的一个重要原因是为了最大限度地提高编译器的可移植性。您可以为所有平台使用一个编译器前端,然后将 IR 传递给特定于平台的代码生成器。 GCC 以这种方式工作,而且我敢肯定大多数(如果不是全部)体面的编译器都是以这种方式工作的。

另一个好处是您可以在将 IR 代码发送到代码生成器之前对其进行某些优化。一些优化不是特定于平台的:例如,不受循环影响的代码可以从循环中拉出。平台优化器通常在较低级别上进行优化,例如寄存器分配、分支等,这些实际上取决于 CPU 的属性。

关于c - 寄存器和临时寄存器有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4405908/

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