栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

基于堆栈的机器是否取决于基于寄存器的机器?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

基于堆栈的机器是否取决于基于寄存器的机器?

JVM在任何地方都没有提到寄存器的存在。从它的角度来看,内存仅存在于少数几个地方,例如每个线程的堆栈,方法区域,运行时常量池等。也就是说,如果您想实际实现遵守JVM的物理设备,则d几乎肯定需要寄存器来保存执行某些字节码时生成的某些临时值,或在侧面维护一些额外的暂存信息。例如,尝试查找该

multianewarray
指令,看看是否可以在没有寄存器的情况下实现它。:-)

如今,您可以在实际的CPU中找到一个与之并行的地方,那就是尽管程序员可以使用一组专用的寄存器,但是大多数CPU都有大量的寄存器供内部用于各种用途。例如,大多数MIPS芯片具有大量用于流水线的寄存器。它们包含诸如先前指令中的控制位之类的东西。如果x86与众不同,我将被震撼。

要记住的是,不是寄存器真正定义了基于寄存器的计算机与基于堆栈的计算机的工作方式。在大多数体系结构中,您都有专用于内部使用的O(1)寄存器。甚至JVM都有这些-
每个方法都有一个“局部变量数组”,该数组最初保存函数的参数,但是如果需要,也可以用作暂存空间。使堆栈计算机与其他计算机区分开的最重要部分是可扩展内存的工作方式。在大多数计算机中,内存是随机访问的,您可以随时从任何位置读取数据。也就是说,在n个存储单元中,您可以随时读取O(n)个存储器。在基于堆栈的计算机中,您只能访问堆栈的前几个位置,因此您一次只能读取O(1)个存储位置。

从理论上讲,因为JVM应该代表完整的虚拟机,所以您可以启动一台计算机并仅运行不带任何操作系统的JVM(或者说,JVM将是OS,而您的“程序”就是Java字节码和类文件)。

还有其他一些基于堆栈的语言,其中第一个可以想到的是Forth。我之所以提到Forth,是因为它是基于堆栈的语言。您所做的每件事都以操纵操作数堆栈的方式表达。关于您的原始问题,这很酷,因为Forth过去在业余爱好者中非常受欢迎,因为您可以很容易地将其移植到嵌入式设备上。要使完整的Forth解释器正常工作,您不需要强大的操作系统-
您只需要命令解释器即可。如今,Forth并不那么流行,但它仍然是一种非常酷的语言。

另一种广泛使用的基于堆栈的语言是Postscript,它在PDF方面失去了很多基础,但仍广泛用于需要在各种平台上呈现可伸缩图形的环境中。从技术上讲,它是一种图灵完备的编程语言,尽管很少有人那样使用它。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/596085.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号