虚拟机和无虚拟机 - 堆栈和跟踪

Posted

技术标签:

【中文标题】虚拟机和无虚拟机 - 堆栈和跟踪【英文标题】:Virtual machine and none virtual machine - stack and trace 【发布时间】:2013-01-14 05:24:14 【问题描述】:

我在这里阅读了很多问题,这些问题解释了堆栈和堆是什么,例如这个:What and where are the stack and heap?,非常有帮助。

我了解高级语言被编译成中间语言,例如Java 的字节码和 .NET 程序的 MSIL。然后将 MSIL 和字节码编译成机器码。

我的理解是中间语言使用堆栈和堆,然后程序被编译成机器代码,这取决于平台,例如基于 Windows 的注册。

但是,在问题中,我已链接到一些回答者,例如Brian R. Bondy 提供了 C 和 C++ 示例。我知道C++没有虚拟机,直接编译成机器码。我的问题是:没有虚拟机的编程语言有堆栈和堆吗?在这些编程语言的情况下,它们是否使用堆栈和堆作为中间表示,同时直接编译为机器代码?

更新 我意识到有基于堆栈和基于寄存器的虚拟机。我要问的问题是:所有物理机都基于寄存器吗?

【问题讨论】:

【参考方案1】:

我发现有一些物理机器的例子,其中处理器具有基于堆栈的指令集,例如RTX2000 系列、UCSD Pascal p-Machine 和 Burroughs 的 B5000 和 B6000 系列机器(取自这个问题:Stack-based machine depends on a register-based machine?)。看来处理器使用的实际指令集可以是基于堆栈的。

【讨论】:

以上是关于虚拟机和无虚拟机 - 堆栈和跟踪的主要内容,如果未能解决你的问题,请参考以下文章

深入理解Java虚拟机——Java堆栈跟踪工具(jstack)

java -- 虚拟机和内存

Java虚拟机和GC知识点,看这一篇就够了

Atitit.虚拟机与指令系统的设计

关于虚拟机问题:怎样让虚拟机和真实机完全独立互不影响

pycharm安装在虚拟机和实体机哪个更好