基于堆栈的字节码或无限注册机的优点

时间:2012-06-20 13:10:33

标签: compiler-construction expression-trees intermediate-code

编译器通常选择基于堆栈或无限寄存器的中间表示(IR)。这些过度表达树的优点是什么?

1 个答案:

答案 0 :(得分:17)

表达式树适用于表达式,但对整个程序的建模无效。特别是,程序的良好表示实际上是由控制和数据流连接的图形(操作和动作)。通常人们谈论使用形成这种图形的“三元组”。

堆栈机器代码很容易为前端生成,但是生成实际代码所需的最终寄存器分配过程更难,因为它有一组与之无关的临时位置(“堆栈”)目标架构,使数据流不便于处理。 (“哪个代码使用此添加的结果?”)。

注册机器生成代码要困难得多,但是通过将这些无限寄存器用作数据流线路,往往会保留数据流。该数据流以及将其轻松分配给实际寄存器的能力(通过图形着色进行标准寄存器分配)使得生成良好代码变得相对容易。

如果您决定直接从这些代码生成虚拟机代码,则会获得不同的性能特征。从本质上讲,堆栈计算机往往会获得更小的代码占用空间。无限注册机器倾向于快速解释执行。正是由于这个原因,Google的Dalvik与JVM不同。 (也许他们也不想被Sun / Oracle起诉类文件格式。)

我建议使用以下文件:Virtual Machine Showdown: Stack Versus Registers。 (PS:Anton Ertl作为作者的任何东西往往都是一本有趣的读物)。

相关问题