繁体   English   中英

自定义VM中有多少个寄存器?

[英]How many registers in custom VM?

我正在设计一个自定义VM,并且对应该使用多少个寄存器感到好奇。 最初,我有255个,但是我有点担心每次我调用一个函数时都会将255个指针(整个KB)备份到堆栈或堆上,而大多数时候它们甚至都不会被使用。 我应该使用多少个寄存器?

您可能希望查看寄存器窗口 ,这是一种减少任何时间可用的“活动”寄存器数量的方法,同时仍将大量寄存器保留在内核中。

话虽如此,您可能会发现使用基于堆栈的体系结构更为方便。 打算在软件中实现的某些主要虚拟机(JVM,CLR,Python等)使用堆栈体系结构。 当然,为堆栈编写编译器要比人为限制的寄存器集要容易得多。

通常,这取决于您认为需要多少。 我质疑255个寄存器在实际应用中的有用性。

我构建的最后一个寄存器机器旨在支持一种小型编程语言,并且在进行映射时,我查看了应用程序的类型,我想指导人们使用的设计方法,并在设计寄存器时平衡了所有这些与性能问题文件。

没有更多细节,这不是容易回答的事情,但是,如果您停下来想一想自己要做什么,并在发现重要问题的各个方面进行权衡,就会得出结论:一起生活,这可能是有道理的。

无论选择多少个寄存器,对于大多数子例程而言,您可能都有太多的选择,而对于少数子例程而言,则可能会有太多的选择。 (这只是一个猜测。但是,考虑到编程中遵循幂定律分布的内容有多少–对象,模块,类的传入引用,对象,模块,类的传入引用,子例程的圈复杂度,子例程的NPath复杂度,SLOC子例程的长度,对象的生存期,对象的大小–仅合理地假设子例程的寄存器数量是相同的,尤其是在您认为复杂度/长度与寄存器数量之间可能存在相关性的情况下)

派诺特VM已找到解决此难题的简单方法:它们具有无限数量的寄存器。 显然,这些寄存器不是存储在无限数组中,而是它们懒惰地实现了足以用于任何单个子例程的寄存器。 这样,它们永远不会用完寄存器,也不会浪费任何空间。

对不起大家。 我对这个愚蠢。 事实证明,我已经有了一个寄存器向量来优化对堆栈的访问,而我完全忘记了。 与其复制它们,不如将它们设置为引用堆栈寄存器的状态。 现在,我需要做的就是专门推动直接推到寄存器,并以一种高效的方式解决问题。 这些寄存器也永远不需要支持,因为它们与功能无关,并且将根据我的堆栈进行完善。 我从来没有想到我可以将值推入它们而无需将等效值推入堆栈。

绝对可怕的模板混乱使它变成了简单的设计概念,尽管这让我非常不高兴。 要购买:静态if和可变参数模板。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM