虚拟机扫盲——关于栈虚拟机和寄存器虚拟机
虚拟机是啥?你别跟我扯VMWare,我对系统编程半窍不通。
早期著名的虚拟机,就是那个恶心的JVM,为什么是栈虚拟机呢?实现简单,知道不?虚拟机自身的效率很重要,实现复杂了怎么跑啊?(虽然现在JVM恶心不是一般)为什么不是寄存器虚拟机呢?反正是虚拟机,寄存器也是在内存里虚拟的,有区别么?
寄存器虚拟机有一毛钱优势么?呵呵,映射到硬件上?那是扯淡,根本不是通用方案。
有可能的区别在哪里?三操作码的代码密度不如二操作码,单操作码的代码密度好像是最高的,也就是说栈虚拟机的bitcode体积是最小的,这样减少了运行时加载的代价。寄存器虚拟机有一毛钱优势么?
加载方式不同,这个和虚拟机有一毛钱关系么?一次加载一堆没用的代码,啥虚拟机他也高效不了。
区别在哪里?有些优化算法不能作用于单操作码?我不确定,二操作码的确会损失一些信息,但是我确定的是IR是三操作码的,然后做一个到单操作码的转换,但是这个是“编译时”确定的,具体怎么别问我,我不可能把我们的设计思路告诉你。没啥特殊的算法,原理都是一样的,设计和实现是你自己的事情。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
好多一毛钱啊,五毛吗。。。。。。。
不懂,学习了.
完全不懂这种一毛钱的虚拟机。
很荣幸的在这个版块看到楼主这样的程序语言设计与实现专家所做的科普。
C语言寄存器变量(register)是存在CPU的寄存器当中的,这样比存在内存中速度快很多。
寄存器虚拟机也有堆栈,只是大量使用C语言的寄存器变量。
register关键字还在被哪个编译器支持?早就废除了。不要紧张,踏踏实实学习自己感兴趣的东西,真正有所突破比什么都强,bbs上就是扯扯淡。