JavaScript:V8 问题:小整数是否被合并?

2023-12-27

正在看这个V8设计文档 https://docs.google.com/document/d/11T2CRex9hXxoJwbYqVQ32yIPMh0uouUZLdyrtmMoL44/edit#其中有一个部分用于Constant Pool Entries

it says

常量池用于存储堆对象和小整数,这些对象和小整数在生成的字节码中作为常量引用。 和

...小整数和强引用的奇怪类型有字节码可以直接加载它们并执行not进入常量池。

所以我很困惑:小整数是否被合并?

我的理解是,如果以下情况,则不值得汇集小整数:sizeof(int) < sizeof(int *)- 因为只复制实际整数而不是复制指向常量池中整数的指针更便宜。此外,保存整数的变量可以优化为直接存储在 CPU 寄存器中,并跳过首先在内存中分配。

另外,它们位于 V8 堆还是堆栈上?我的理解一直是 smis 只是在堆栈上分配的立即值,而不是在堆上分配的指针+整数。另外,如果您使用 chrome devtool 拍摄堆快照,则在堆快照中找不到 smis - 只有堆编号(例如大整数或双精度(如 3.14))位于堆上,直到我看到这篇文章https://v8.dev/blog/pointer-compression#value-tagging-in-v8 https://v8.dev/blog/pointer-compression#value-tagging-in-v8

V8 中的 JavaScript 值都表示为对象并分配在 V8 堆上,无论它们是对象、数组、数字还是字符串。这允许我们将任何值表示为指向对象的指针。

现在我很困惑 - smis 也分配在堆上吗?


V8 开发者在这里。

小整数是否被合并?

他们不是(至少现在不是)。也就是说,这是一个很小的实现细节,可以通过任何一种方式完成:完全可以使用 Smis 的常量池。我想,之所以做出为 Smis 构建特殊机制(而不是重用通用常量池)的决定,是因为事实证明,这样会更高效。

如果以下情况,则不值得汇集小整数sizeof(int) < sizeof(int *)

细节不同(Smi 不是int,并且常量池槽是通过索引而不是 C++ 指针引用的),但这种推理确实朝着正确的方向发展:避免间接可以节省时间和内存。

smis 也分配在堆上吗?

是的,所有内容都分配在堆上。堆栈仅对临时(且足够小的)事物有用;这很大程度上与事物的类型无关。

Smis 的“技巧”是它们不存储为separate对象:当你有一个引用 Smi 的对象时,例如let foo = {smi: 42},那么值42可以进行smi编码并直接存储inside“foo”对象(而如果该值是42.5,那么该对象将存储一个指向单独的“HeapNumber”的指针)。但由于对象在堆上,Smi 也在堆上。

@丹尼尔克鲁兹

我的理解是,恒定的小整数被汇集起来。可变的小整数则不然。

没有。源代码中出现的任何文字都是“常量”。无论你使用let or const因为你的变量与此无关。

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

JavaScript:V8 问题:小整数是否被合并? 的相关文章

随机推荐

  • FHSTwitterEngine - 'NSInvalidArgumentException','数据参数为零'

    我正在使用 FHSTwitterEngine 将 gif 发布到 twitpic 当我的 iPhone 上有 wifi 或 3G 连接时 一切正常 但我还想在没有连接或上传失败时实现一些错误处理 因此 为了进行测试 我将 iPhone 置于
  • 连接两个表的表是否应该有自己的ID?

    我有两张桌子 First id name Second id name 另一张表连接前两个表 Third first id second id 第三张桌子在那里only解决M N问题 应该有自己的ID吗 如果表仅包含两个外键 则没有理由拥有
  • Mybatis 嵌套一对一或一对多关系映射

    我使用 myBatis 来映射一个简单的数据库 作为示例 它由4个型号组成 User Car Tariff 保险 User has 私人列表 carList and 私人关税关税以及其他一些带有 getter 和 setter 的字段 Ca
  • 如何识别特定时间范围内发生的行?

    我有一张表 其中包含患者的医院就诊情况 我正在尝试标记上次访问后 90 天内发生的访问 然而 需要注意的是 一旦一次访问被标记为重叠访问 该访问就不应用于评估与另一次访问的重叠 让我用一个例子来解释一下 Table visitID pati
  • 数据注释 - 使用属性扩展并将正则表达式存储在资源文件中

    我目前正在与MVC4数据注释来处理验证 我正在开发一个非常国际化的网站 因此我将所有文本保存在资源文件中 我还想在资源文件中保留用于验证的正则表达式 以便我可以使用相同的代码进行检查 例如 邮政编码 英国 and 邮政编码 美国 只需使用不
  • PropertyDescriptor和WPF绑定机制

    背景 我正在调查一些代码并遇到一个包含DataGrid有一些绑定列 Binding Binding calc from 我到处搜索 但没有包含名为的属性的类calc from 然后我偶然发现了一些PropertyDescriptor类 我认
  • 为什么 C# 7 ValueTuples 实现 Equals 方法而不是双等于运算符?

    考虑以下代码片段 var tuple1 7 foo var tuple2 7 foo var tuple3 42 bar Assert That tuple1 Equals tuple2 Is True This passes Assert
  • Java - Future.get() 多次调用

    Java 是如何实现的Future get 任务完成后多次调用的情况下表现如何 它返回相同的结果吗 或者抛出一个ExecutionException如果计算失败 一次又一次出现相同的异常 我在文档中找不到任何有关它的内容 您可以致电get
  • Android源代码不工作,通过glReadPixels读取帧缓冲区

    我是 Android 开发新手 有一项任务是在指定的时间间隔后读取帧缓冲区数据 我想出了以下代码 public class mainActivity extends Activity Bitmap mSavedBM private EGL1
  • 我应该使用哪种依赖注入工具? [关闭]

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

    我想在启动后以工厂模式创建一些 spring beans 例如 我经常有一些工作要做 并且需要创建一个任务 bean 它可能依赖于其他单例 spring bean 并执行它 可能有多个工作要同时执行 因此每个任务 bean 都需要是独立的
  • 第一个 DropDownList 更改后如何从数据库加载第二个 DropDown 列表

    我正在构建一个网络应用程序 在某些时候 用户需要将数据输入到表单中 该表单有几个文本字段和DropDownLists 其中一个 DDL 依赖于其先前的 DDL 发生的情况是 当用户从第一个 DDL 中选择一个值时 第二个 DDL 应该从数据
  • 预约调度算法(N个人,N个忙闲时段,约束-满足)

    问题陈述 我们有一位雇主想要面试 N 个人 因此安排了 N 个面试时段 每个人都有一个空闲 忙碌的时间表 给出一个算法 如果可能的话 将 N 个人安排到 N 个位置 如果不可能 则返回一个标志 错误 等 最快的运行时复杂度是多少 到目前为止
  • 玩!框架 - 处理 POST 请求

    这是处理登录 POST 请求的路由 POST login submit controllers Users loginSubmit user String password String 这是login scala html
  • 比较 2 个不同行和列之间的日期

    我在弄清楚这一点时遇到问题 这是一个示例表 我需要能够找到的是对于给定的客户 ID 和 Part ID Discontinue Date 大于下一行的 effective Date 的任何记录 这是一个客户定价表 因此第 53 行的 Dis
  • 有没有办法在 Spring XML 中指定默认属性值?

    我们正在使用一个属性占位符配置器在 Spring 配置中使用 java 属性 详细信息在这里 http static springsource org spring docs 2 5 x reference beans html beans
  • 使用 WinHTTP 和 Excel 配置代理

    我正在使用 WinHTTP 在 Excel VBA 宏中执行 GET 请求 但是 如果我尝试从具有代理的网络中的计算机发出请求 则它不起作用 如果我手动配置它 它可以工作 但我认为使用我正在开发的工具的人不会知道他们的代理服务器 有没有办法
  • 为什么 _.escape 会修改 Underscore.js 中的 / 字符?

    我正在浏览下划线 js api http underscorejs org escape我注意到 escape逃脱 lt gt and 人物 让我惊讶的是逃跑 有没有理由逃避 我不知道的角色 EDIT 好吧 看来是推荐的OWASP http
  • MVC 3 实体框架中从多对多链接表添加关系时发生主键冲突

    我已经阅读了这里的许多问题 这些问题乍一看似乎有类似的问题 但看起来并不完全相同 如果这个问题在某个地方得到了回答 我深表歉意 但就像我说的 我已经阅读了很多内容 但找不到答案 我正在使用实体框架和 MVC 3 我正在尝试向实体框架中的产品
  • JavaScript:V8 问题:小整数是否被合并?

    正在看这个V8设计文档 https docs google com document d 11T2CRex9hXxoJwbYqVQ32yIPMh0uouUZLdyrtmMoL44 edit 其中有一个部分用于Constant Pool En