Javascript v8是否仍然有连续内存块的C样式数组,如何确保使用它们?

Javascript v8是否仍然有连续内存块的C样式数组,如何确保使用它们?,javascript,node.js,v8,Javascript,Node.js,V8,在v8中,数组被表示为从索引到值的哈希映射,这似乎是一种传统智慧。我发现的唯一另一种说法是: 然而,它似乎具有权威性,可以追溯到2012年。从那以后可能发生了很多变化 这仍然是真的吗 var a1=Array(1000)是引擎盖下的一个连续数组(除非您超出了数组的边界),而var a2=[]不是?V8将尽可能使用真正的数组。例如,如果您以连续的方式填充数组,则不要在其上使用delete,等等。基本上,如果您使用它时将其视为一个真实的数组(但对您来说,它会神奇地增长),V8可能会在幕后继续使用真

在v8中,数组被表示为从索引到值的哈希映射,这似乎是一种传统智慧。我发现的唯一另一种说法是:

然而,它似乎具有权威性,可以追溯到2012年。从那以后可能发生了很多变化

这仍然是真的吗


var a1=Array(1000)
是引擎盖下的一个连续数组(除非您超出了数组的边界),而
var a2=[]
不是?

V8将尽可能使用真正的数组。例如,如果您以连续的方式填充数组,则不要在其上使用
delete
,等等。基本上,如果您使用它时将其视为一个真实的数组(但对您来说,它会神奇地增长),V8可能会在幕后继续使用真实的数组

如果您的数据适合(
Int8Array
Uint8Array
uint8clampedaray
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
,或
Float64Array
),您可以使用它们来确保处理的是真正的数组



关于你在问题下添加的评论:我没有一个具体的参考,我可以引用上述内容。当然,V8源代码在上是可用的,但是在数组可能回到字典行为的所有地方深入研究它可能比您(或我)想要做的工作要多。:-)

你想知道谷歌是否删除了优化?如果您遇到了预期优化似乎不存在的情况,请详细说明。有很多东西可以对代码进行去优化。我主要是在寻找一个更新的源代码。自2012年以来,关于这一主题一定有一些文章发表过。我想我的看法是,如果没有一个特定的代码问题,可能会让人认为事情已经变得更糟,那么一个人所能做的就是猜测谷歌不想让自己的代码步履蹒跚,或者检查源代码。不管是哪种情况,你的境况都没有真正好转,因为在前一种情况下,技术上可能是错误的,而在后一种情况下,来源可能会在明天发生变化。不管怎样,您只需要编写清晰、可维护的代码,并希望他们继续高效地实现引擎,这当然是他们的动机……因此,要么相信其他人的猜测,每天不断检查源代码,或者只是相信软件工程师会继续做他们高薪的工作。