为了账号安全,请及时绑定邮箱和手机立即绑定

考虑到非类型化的javascript数组不是同质的,它们如何布置在内存中?

考虑到非类型化的javascript数组不是同质的,它们如何布置在内存中?

胡说叔叔 2021-04-29 13:28:31
我对无类型的javascript数组的性能特征感到好奇,因为它们不是同质的,并且想知道如何在内部进行处理。例如,如果我在数组中有一个数字和一些任意对象,它们是否连续存储在内存中?是否将所有原语都装箱,并且数组仅包含指向所有内容的指针?它是VM的实现细节吗?
查看完整描述

2 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

这取决于JavaScript引擎的实现。

但通常在JavaScript数组中,整数和浮点数是按值存储的,而所有其他对象都是按引用存储的。

V8中,数组类型将为PACKED_ELEMENTSHOLEY_ELEMENTS(取决于创建/填充数组的方式),并且每个字符串还将另外存储在堆中。

要进行验证,请%DebugPrint在V8引擎的调试版本中使用该功能(您可以使用jsvu工具获得一个):

d8> var a = [1, 2, 'aaa']; %DebugPrint(a);

DebugPrint: 000003B13FECFC89: [JSArray]

 - elements: 0x03b13fecfc31 <FixedArray[3]> {

           0: 1

           1: 2

           2: 0x00c73b3e0fe1 <String[#3]: aaa>

 }


查看完整回答
反对 回复 2021-05-20
  • 2 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信