寄存器与堆栈

2023-12-30

与使用基于堆栈的虚拟机相比,使用基于寄存器的虚拟机到底有哪些优点和缺点?

对我来说,基于寄存器的机器似乎更容易编程并且更高效。那么为什么 JVM、CLR 和 Python VM 都是基于堆栈的呢?


在硬件中实现时,基于寄存器的机器将变得更加高效,因为对较慢 RAM 的访问较少。然而,在软件中,即使是基于寄存器的架构也很可能在 RAM 中拥有“寄存器”。在这种情况下,基于堆栈的机器将同样高效。

此外,基于堆栈的虚拟机将使编写编译器变得更加容易。您不必处理寄存器分配策略。本质上,您可以使用无限数量的寄存器。

Update:我在假设有一个解释的虚拟机的情况下写了这个答案。对于 JIT 编译的虚拟机来说,这可能不成立。我跑过这张纸 http://static.usenix.org/events/vee05/full_papers/p153-yunhe.pdf这似乎表明 JIT 编译的虚拟机使用寄存器架构可能会更有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

寄存器与堆栈 的相关文章

  • 推荐的在线片段管理器[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个在线片段管理器 用于工作 个人使用和灵感 我的主要需求是谷歌 脸书登录 各种编程语言的字体
  • 当可以使用库函数时,使用 system() 函数是不是不好的做法?为什么?

    假设正在开发的应用程序需要一些功能 可以通过对命令行程序进行系统调用或利用库来实现 假设效率不是问题 那么简单地对程序进行系统调用而不是利用库是不好的做法吗 这样做有什么缺点 更具体地说 此场景的一个示例是需要从 Web 服务器下载文件的应
  • YAGNI 在编写测试时也适用吗?

    当我编写代码时 我只编写我需要的函数 这种方法也适用于编写测试吗 为了安全起见 我应该提前为我能想到的每个用例编写测试 还是应该只为遇到的用例编写测试 我认为当你编写一个方法时 你应该测试预期的和潜在的错误路径 这并不意味着您应该扩展您的设
  • 将 IP 地址与 IP 范围匹配?

    我有一个 MySQL 表设置如下 Field Type Null Key Default Extra ipaddress s varchar 15 YES MUL NULL ipaddress e varchar 16 YES NULL
  • 将 EBNF 转换为 BNF

    我的计算机语言课已经过去几年了 所以我已经忘记了 BNF 和 EBNF 的要点 而且我身边也没有教科书 具体来说 我忘记了如何将 EBNF 转换为 BNF 据我所知 我知道要点之一是转换 term into
  • 封装和抽象之间的区别

    我今天去面试了 我有一个问题来自OOP 关于之间的区别封装 抽象 我据我所知回答说封装基本上将数据成员和成员函数绑定到一个称为Class 然而抽象基本上是为了隐藏实现的复杂性并为用户提供方便的访问 我以为她会同意我的回答 但她质疑 如果两者
  • 代码高尔夫:弗罗贝尼乌斯数

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 编写最短的程序来计算给定正数集的弗罗贝尼乌斯数 弗罗贝尼乌斯数是不能写成集合中数字的正倍数之和
  • 您能解释一下流的概念吗?

    我知道流是字节序列的表示 每个流都提供了向其给定的后备存储读取和写入字节的方法 但流的意义何在 为什么我们与之交互的不是后备存储本身 不管出于什么原因 这个概念并不适合我 我读过很多文章 但我想我需要一个类比或其他东西 选择 流 这个词是因
  • 我在哪里可以学习编写词法分析器的基础知识?

    我想学习如何编写词法分析器 我的大学课程有一项作业 我们必须编写一个解析器 以及与之配套的词法分析器 但这是给我们的 没有任何指导或反馈 超出了标准 所以我并没有真正从中学到很多东西 搜索这个主题后 我只能找到相当高级的文章 这些文章重点关
  • 在未排序的数组中查找 2 个等于给定总和的数字

    我们需要在数组中找到总和等于给定值的数字对 A 6 4 5 7 9 1 2 总和 10 那么这些对是 6 4 9 1 我对此有两个解决方案 O nlogn 解决方案 使用 2 个迭代器 开始和结束 进行排序 校验和 O n 解决方案 对数组
  • 数据库级别的国际化

    谁能向我指出一些解决数据库级别任务国际化的模式 最简单的方法是为每个文本列的每种语言添加一个文本列 但这在某种程度上有点难闻 我真的希望能够动态添加支持的语言 我要提出的解决方案是保存在模型中的一种主要语言和一个查询翻译并将翻译保存到的字典
  • 如何正确区分树(即嵌套的字符串列表)?

    我正在使用由嵌套字符串列表组成的数据类型的在线编辑器 请注意 如果每次更改单个值时我都要传输整个结构 那么流量可能会变得难以忍受 所以 为了减少流量 我想到了应用 diff 工具 问题是 如何找到并报告两棵树的差异 例如 ah bh ha
  • 是否可以通过括号来防止死亡?

    有时 我会编写一些带有比我喜欢的更多括号的代码 if new Day new Date millisecondsPerDay 75 instanceof oldDay Bonus points if that condition made
  • 链表、数组和硬件内存缓存

    虽然之前有人问过关于链表与数组的问题 但答案大多归结为我们大多数人在某些时候可能已经学到的东西 列表擅长插入和删除 数组擅长随机访问 现在 像 Bjarne Stroustrup 这样受人尊敬的人已经argued https www you
  • 如何使PHP库松耦合? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 独立于符号的字符串的模式匹配

    我需要一种算法 可以在数据中找到预定义的模式 以字符串的形式存在 独立于数据和模式的实际符号 字符 我只关心符号之间的关系 而不关心符号本身 数据中的同一符号具有不同的模式符号也是合法的 模式匹配算法必须强制执行的唯一一件事是保留模式中同一
  • 什么是样板代码、热点代码和热点?

    我知道这些术语是在性能实现 优化的背景下使用的 最近一直在研究这个问题 并尝试过搜索 但没有得到任何例子 清楚地阐述 描述这些概念以及在现实世界开发场景中实现这些问题 概念 有人可以彻底解释这些术语 示例场景以及可能使用这些概念和术语的地方
  • 在二维平面中找到距离 P 点最近的 K 个点

    资料来源 亚马逊面试问题 解决方案1制作大小为 K 的堆并按最小距离收集点O NLogK 复杂 解决方案2 取大小为 N 的数组并按距离排序 应该使用QuickSort 霍尔修改 取前 K 点作为答案 这太复杂了 NlogN 但可以优化到近
  • 替代位置基础系统(十六进制、八进制、二进制)如何工作?如何将它们转换为十进制?

    我以前在编程课上没有学过这一点 但现在我需要知道它 有哪些学习这些数字以及如何转换它们的好资源 我几乎会像记住乘法表一样记住这些 在我们日常的十进制系统中 基数或radix http en wikipedia org wiki Radix
  • Windows 应用程序事实上的标准键盘快捷键列表?

    假设我正在为 Windows 开发一个新的桌面应用程序 是否有我可以查阅的所有 Windows 应用程序都应支持的键盘快捷键列表 来自 Microsoft 或第三方 注意 当我在这里说 所有 Windows 应用程序 时 我的真正意思是 特

随机推荐

  • 使用 R Markdown 的 Beamer 演示

    我正在使用 R Markdown 来制作投影仪演示我对幻灯片水平有疑问 我选择法兰克福主题 该主题允许制定演示计划 标题中的项目符号 我的问题 当我输入 slide level 2 时 我有内容 但没有演示文稿的计划 当我输入 slide
  • 如何从命令行将错误列表(或任何自定义查询)从 TFS 导出到 Excel?

    我需要将错误列表从 Team Foundation Server 导出到 Excel 手动执行此操作很简单 但我需要命令行版本 因为该任务需要自动化 有人知道该怎么做吗 回答你原来的问题 在 TFS 中添加新查询 创建查询并单击 保存 这应
  • 使用 Visual Studio 创建 MSI 并强制所有用户

    我使用 Visual Studio 2015 带有 Visual Studio 安装程序插件 创建了一个安装程序 目标是始终使用相同的本地资源运行应用程序 无论谁登录 因此我们的目标是 CommonAppDataFolder Win10 上
  • 淡出旧元素,淡入新元素

    我是新来反应并尝试过反应动画 http facebook github io react docs animation html 当在 TransitionGroup 中添加或删除元素时 它们非常有用 但是 如果我用类似的元素替换单个元素
  • 非活动类中的警报对话框

    我有一个代码可以检查一些数据并在非活动类中显示警报 但是在运行应用程序时崩溃并且不显示警报对话框 我使用下面的代码 if str isEmpty strPort isEmpty new AlertDialog Builder Mtx get
  • Kivy (Python) - 椭圆点击事件

    我正在尝试翻译的开头一个简单的画布应用程序 https bloom510 github io pitch canvas 我用 JavaScript 编写了 Kivy 框架 我已经能够沿着圆的周长分布顶点 但是无论是用 Python 还是 K
  • 即使在 conda 中安装后也无法导入 Poppler

    我正在尝试使用 pdf 渲染包 Poppler 我在这里找到了相同的 Anaconda 安装 https anaconda org conda forge poppler https anaconda org conda forge pop
  • Python读取文件时出现UnicodeDecodeError,如何忽略错误并跳转到下一行?

    我必须将文本文件读入Python 文件编码为 file bi test csv text plain charset us ascii 这是第三方文件 我每天都会收到一个新文件 所以我宁愿不更改它 该文件包含非 ascii 字符 例如 我需
  • Laravel - 有没有办法将 whereHas 和 with 结合起来

    我目前面临一个小问题 我只想在存在特定条件的关系时返回模型 这与 whereHas 方法配合得很好 m Model whereHas programs function q q gt active 但是 将关系称为这样的属性将为我提供所有内
  • Flask 将 pyaudio 发送到浏览器

    我正在将服务器麦克风的音频发送到浏览器 主要是this https stackoverflow com a 56037682 4871482发布但有一些修改的选项 一切都工作正常 直到你转到手机或野生动物园 它根本不起作用 我尝试过使用类似
  • 迁移学习:模型给出不变的损失结果。难道不是训练吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在尝试训练一个回归Inception V3 上的模型 输入是大小为 96 320 3 的图像 总共有 16k 图像 其中 12k 用于训练
  • Silverlight for WP7 中的 FileNotFoundException

    找不到文件或程序集名称 System Windows debug resources Version 2 0 5 0 Culture en US PublicKeyToken 7cec85d7bea7798e 或其依赖项之一 我很确定这与某
  • 蛇线中的网格自动流动?

    我想知道是否可以在列模式下使用 css 网格并以蛇线填充单元格 像这样 01 06 07 12 02 05 08 11 03 04 09 10 对此有什么建议吗 感谢您的帮助 如果我们考虑到你总是有 3 行 这里有一个想法 containe
  • html/css 中的元素可以有小数高度吗?

    我正在一个网站上工作 当我用 firefox 中的 firebug 查看它时 各种元素的高度似乎都是 133 8 像素 而 chrome 中的 firebug lite 报告的高度为 133px 使用相同的方法 这是浏览器渲染的差异 还是只
  • Netlify 和 React Vite:Netlify 在 Vite 和 React 站点中重新加载时显示“找不到页面”

    我有一个用 React JS 构建的网站 我使用 Vite 作为 JS Bundler 问题是 当我在 Netlify 上部署站点并重新加载页面时 它显示 找不到页面 我尝试添加更改vite config jsfile import def
  • ReferenceError:文档未定义 - Firebase appcheck 与 React

    我正在尝试将 appcheck 集成到我的 Firebase React 中 我使用 TypeScript Web 版本 9 我将下面的代码添加到我的functions src index ts中 我的 appcheck 集成代码 cons
  • 通用应用程序:仅构建经典工具包

    我必须从头开始创建一个通用应用程序 首先是经典应用程序 在未来的某个时候 是现代应用程序 我已经使用 Cmd 生成了该应用程序 我已经实现了经典应用程序所需的基础知识 分离了可以在现代应用程序中重用的所有内容 并将其放入共享目录中 问题是
  • read.csv 比 data.table::fread 更快 [重复]

    这个问题在这里已经有答案了 在网上我可以看到我应该使用 data table 和 fread 来加载我的数据 但是当我运行基准测试时 我得到以下结果 Unit milliseconds expr min lq mean median uq
  • UILabel 中的居中文本

    如何使 UILabel 中的文本居中 代码是 yourLabel setTextAlignment UITextAlignmentCenter 或 当然 Obj C 2 0 点语法 yourLabel textAlignment UITex
  • 寄存器与堆栈

    与使用基于堆栈的虚拟机相比 使用基于寄存器的虚拟机到底有哪些优点和缺点 对我来说 基于寄存器的机器似乎更容易编程并且更高效 那么为什么 JVM CLR 和 Python VM 都是基于堆栈的呢 在硬件中实现时 基于寄存器的机器将变得更加高效