v8是否仍然有连续的内存块的C风格的数组,我怎样才能确保我使用它们?

似乎有一个传统的观点认为,数组在第8版中被表示为从索引到值的hashmaps。 我发现,唯一的来源是否是这样的:

似乎权威,但是,它可以追溯到2012年。自那以后很多可能已经改变。

这是真的吗?

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

如果可能的话,V8将使用真正的数组。 例如,如果你以连续的方式填充数组,那么不要使用delete等。基本上,如果你使用它,就像它是一个真正的数组(但一个神奇的增长为你),V8很可能能够继续使用封面下的真实数组。

如果你的数据适合于某种types的数组 ( Int8ArrayUint8ArrayUint8ClampedArrayInt16ArrayUint16ArrayInt32ArrayUint32ArrayFloat32ArrayFloat64Array ),你可以使用它们来确保你正在处理一个真正的数组。


重新在你的问题下添加的评论:我没有一个具体的参考我可以引用上述。 V8源代码当然可以在V8网站上find ,但是对于数组可能会回落到字典行为的所有地方来说,V8源代码可能比您(或我)要做的工作要多。 🙂