v8是否仍然具有连续内存块的C风格数组,我如何确保使用它们?

时间:2016-06-05 18:26:56

标签: javascript node.js v8

似乎有一种传统观点认为数组表示为从v8中的索引到值的哈希映射。我发现状态的唯一来源是:

https://www.youtube.com/watch?feature=player_detailpage&v=XAqIpGU8ZZk#t=994s

似乎权威,然而,它可以追溯到2012年。自那以后可能已经发生了很多变化。

是否仍然如此

var a1 = Array(1000)是一个连续的数组(除非你超出数组的边界)并且var a2 = []不是?

1 个答案:

答案 0 :(得分:1)

如果可以,V8将使用真正的数组。例如,如果以连续的方式填充数组,请不要在其上使用delete等。基本上,如果您使用它就好像它是一个真正的数组(但是为您神奇地增长的数组), V8很可能能够继续使用真正的阵列。

如果您的数据适合typed arrays之一(Int8ArrayUint8ArrayUint8ClampedArrayInt16ArrayUint16Array,{ {1}},Int32ArrayUint32ArrayFloat32Array),您可以使用它们确保您正在处理真正的数组。

重新提出您在问题中添加的评论:我没有具体的参考资料,我可以引用上述内容。当然,V8源代码可以在the V8 site上获得,但是对于所有可能回退到字典行为的地方来说,挖掘它可能比你(或我)想要做的更多。 : - )