【问题标题】:How to store multiple variables with only a finite amount of registers?如何仅使用有限数量的寄存器存储多个变量?
【发布时间】:2015-10-21 05:14:01
【问题描述】:

我编写了一个简单的虚拟机,其中包含操作堆栈的指令,将堆栈值存储到寄存器中,将寄存器值加载到堆栈中,将值从寄存器移动到寄存器并设置寄存器值......我正在尝试编写一个真正的编译成这个 VM 字节码的简单语言,我还没有完成任何从地址跳转到地址的指令,但我觉得 VM 有足够的能力生成用于存储变量值的字节码。

虚拟机有 7 个寄存器:a、b、x、y、z、j 和 i。但是,如果我有 12 个包含简单整数的变量,我将如何将它们中的每一个存储在寄存器中?

我以前读过这个,很多时候人们都在谈论寄存器分配——我不知道如何在代码中实现它。我不确定如何开始,而且寄存器分配器似乎相当复杂。

是否有任何(真的)简单的寄存器分配器我可以查看或尝试实现?谁能为我简化解释,以便我尝试实现一个?

谢谢。

【问题讨论】:

    标签: compiler-construction register-allocation


    【解决方案1】:

    您将变量存储在堆栈中(或全局变量的静态存储),而不是寄存器中。至少,大部分;优化器可能会选择在寄存器中保留一两个经常使用的变量,但如果我是你,我不会担心这一点。

    寄存器用于在计算期间保存中间结果。如果计算需要大量中间值,您可能会用完变量,在这种情况下,您需要将一些值“溢出”到堆栈分配的临时值中。

    重新排序计算以最小化所需的临时数量是困难的。我建议从一个简单的非最优策略开始。

    七个寄存器并不多。为什么选择这样一个限制性的 VM 设计?也许你应该重新考虑。

    【讨论】:

    • 哦,我明白了,所以将变量存储到寄存器中是一种优化吗?唯一让我感到困惑的是,如果您将变量值存储在堆栈中,您如何跟踪它在堆栈中的位置以及它所拥有的变量?我认为 7 个寄存器看起来并不多,但我并没有真正考虑过任何东西的设计 - 这只是一个自发的副项目 - 我可以轻松添加更多寄存器,但是有多少?
    猜你喜欢
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 2015-01-05
    • 1970-01-01
    • 2021-05-23
    • 2013-05-14
    相关资源
    最近更新 更多