Architecture 堆栈和堆分离的虚拟机设计

Architecture 堆栈和堆分离的虚拟机设计,architecture,theory,vm-implementation,stack-machine,Architecture,Theory,Vm Implementation,Stack Machine,我试图通过实现一些书中的东西来学习更多关于虚拟机和编程语言的知识。我正在阅读的这本书将堆栈和堆放在一个内存区域中。堆栈向上增长,堆向下增长。我想知道除了加载/存储操作的简单策略之外,这还有什么好处,因为您不需要区分两个不同的内存区域 我问这个问题的原因是因为我想偏离书中的计划,为堆栈和堆设置两个不同的内存区域。这对我来说似乎更有意义,而且我不必担心堆栈和堆寄存器会相互冲突。好吧,在内存有限且没有虚拟内存的旧机器上,内存的两部分表示机器可用空间的两端。如果有48k的连续空间,一端是堆栈向上增长,另

我试图通过实现一些书中的东西来学习更多关于虚拟机和编程语言的知识。我正在阅读的这本书将堆栈和堆放在一个内存区域中。堆栈向上增长,堆向下增长。我想知道除了加载/存储操作的简单策略之外,这还有什么好处,因为您不需要区分两个不同的内存区域


我问这个问题的原因是因为我想偏离书中的计划,为堆栈和堆设置两个不同的内存区域。这对我来说似乎更有意义,而且我不必担心堆栈和堆寄存器会相互冲突。

好吧,在内存有限且没有虚拟内存的旧机器上,内存的两部分表示机器可用空间的两端。如果有48k的连续空间,一端是堆栈向上增长,另一端是堆向下增长。最终,它们发生碰撞,你“失去记忆”

这就是灵感的来源。现代机器当然不会(必然)受到内存的挑战,您可以使用VM系统来帮助隔离不同的部分,如堆和堆栈。那么你就没有真正的理由在其中一个身上“成长”,而在另一个身上“成长”。相反,你把它们分配到你想要的大小,然后开始成长,直到你用完为止

当然,今天,使用vm,您可以控制堆栈(甚至堆区域)上的执行等。在过去,对于更小、更老的机器来说,这并不是一个真正的问题

我想知道这除了可能是一个 加载/存储操作的更简单策略(…)

好处是您不需要虚拟内存,这使得这个概念可以在最简单的CPU/体系结构上工作。此外,您不需要一个跟踪内存区域及其分配给程序的操作系统。换句话说,这样的实现非常适合于小规模的应用 它通常没有(也不需要)现代桌面或服务器CPU的处理能力

(…)因为您不需要区分两个不同的内存区域

我想,内存区域是指多个连续内存空间的概念,这些空间相互分离,每个空间都有一个相对索引的地址范围
(0,…,n)
,其中n是该区域中的最大字节数

如果有的话,这是很有意义的,CPU在物理内存上实现了一个层,给程序一种错觉,每个程序都有一个独立的、连续的内存空间