虚拟机设计带有单独的堆栈和堆



我试图通过实现书籍中发现的一些内容来了解有关虚拟机和编程语言的更多信息。我目前正在浏览的书将堆栈和堆保存在一个内存区域中。堆栈成长,堆的向下生长。我想知道,除了对负载/商店操作的更简单策略外,这是什么好处,因为您不需要区分两个不同的内存区域。

我问的原因是因为我正在考虑偏离书籍中的计划,并为堆栈和堆有两个不同的内存区域。对我来说,这似乎更有意义,我不必担心堆栈和堆积的注册表相互奔跑。

我想知道这是什么好处 负载/商店操作的更简单策略(...)

好处是您不需要虚拟内存,这使得此概念在最简单的CPU/架构中起作用。另外,您不需要操作系统来跟踪内存区域及其对程序的分配。换句话说,这种实现非常适合例如小规模嵌入式系统通常没有(也不需要)现代桌面或服务器CPU的处理能力。

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

我猜想通过内存区域您的意思是分开的多个连续内存空间的概念,使它们每个都有相对索引的地址范围(0, ..., n),其中n是该区域中的最大字节数。

如果您有虚拟内存,那是很有意义的,那就是CPU在物理内存的顶部实现了一层,从而使程序具有分开,连续的内存空间的幻觉。

好吧,在有限的内存且没有虚拟内存的较旧机器上,内存的两个部分代表了机器可用空间的两个相反端。如果您有48k的连续空间,则一端是堆栈向上生长,另一端是向下生长的堆。最终他们碰撞了,您"不记忆"。

这就是灵感的来源。现代机器当然不会受到挑战(一定是),并且您拥有VM系统来帮助隔离堆和堆栈等不同部分。然后,您没有真正的理由将一个"长大"和另一个"成长"。相反,您将它们分配到所需的尺寸,然后开始长大直到用完为止。

当然,今天,使用VM,您可以控制执行,堆栈上的执行情况(甚至是堆区域)。过去,在较小的旧机器上并不是一个问题。

相关内容

最新更新