如何只用有限数量的寄存器存储多个变量?

How to store multiple variables with only a finite amount of registers?

我编写了一个简单的虚拟机,其中包含操作堆栈、将堆栈值存储到寄存器中、将寄存器值加载到堆栈中、将值从一个寄存器移动到另一个寄存器以及设置寄存器值的指令...我正在尝试编写一种编译为该 VM 字节码的非常简单的语言,我没有执行任何从一个地址跳到另一个地址的指令,但我觉得 VM 足以生成用于存储变量值的字节码。

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

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

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

谢谢。

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

寄存器用于保存计算过程中的中间结果。如果计算需要很多中间值,您可以 运行 out of variables 在这种情况下,您需要 "spill" 一些值到堆栈分配的临时值中。

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

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