在CPU寄存器中分配寄存器变量的标准?

时间:2010-10-04 06:02:52

标签: c

如果可能,声明变量寄存器是建议编译器应将特定的自动变量分配给CPU寄存器。

但编译器如何决定何时将寄存器变量放入CPU寄存器?它使用哪种算法/机制来决定?

谢谢,

纳温

4 个答案:

答案 0 :(得分:5)

如果诺曼拉姆齐没有注意到这一点并回答,也许指向他papers之一的指针将会有序。

图形着色主要用于静态编译器(也就是提前编译器)。对于动态(即时)编译器,通常使用能够更快地提供结果的东西(例如,linear scan算法),即使它通常不会像寄存器分配那样好。

答案 1 :(得分:1)

正如Jerry所说,编译器使用寄存器分配器。注册分配是其中一个简单定义但很难解决的问题。

在过去,编译器非常感谢您帮助解决将哪些变量放入寄存器以及何时输入的问题。但是今天,任务被更好地理解,编译器忙于程序分析,实际上听你说的话。

除非完全关闭优化,否则编译器很可能会忽略register说明符。

答案 2 :(得分:1)

除了上面提到的那些,GCC(4.5.x +)使用SSA-Tree based register allocatorPasses section中的更详细信息),尽管这是SSA register allocation

的一个很好的示例

答案 3 :(得分:0)

您可以为变量指定注册关键字。但它由编译器决定是否将其放入寄存器。通常在静态编译中使用图形着色来产生有效的分配。在动态(JIT)编译中,首选一种称为线性扫描分配的方法,因为图形着色需要更多时间 有向无环图(DAG)可用于产生最佳指令序列(或最小寄存器分配序列) 如需更全面的阅读,请参阅:1。Towards a More Principled Compiler:Register Allocation and Instruction Selection Revisited by David Ryan Koes
2。 Alfred V Aho的编译器设计原理