v8是否仍然有连续的内存块的C风格的数组,我怎样才能确保我使用它们?
似乎有一个传统的观点认为,数组在第8版中被表示为从索引到值的hashmaps。 我发现,唯一的来源是否是这样的:
似乎权威,但是,它可以追溯到2012年。自那以后很多可能已经改变。
这是真的吗?
var a1 = Array(1000)
是引擎盖下的一个连续数组(除非你超出了数组的边界)并且var a2 = []
不是?
如果可能的话,V8将使用真正的数组。 例如,如果你以连续的方式填充数组,那么不要使用delete
等。基本上,如果你使用它,就像它是一个真正的数组(但一个神奇的增长为你),V8很可能能够继续使用封面下的真实数组。
如果你的数据适合于某种types的数组 ( Int8Array
, Uint8Array
, Uint8ClampedArray
, Int16Array
, Uint16Array
, Int32Array
, Uint32Array
, Float32Array
或Float64Array
),你可以使用它们来确保你正在处理一个真正的数组。
重新在你的问题下添加的评论:我没有一个具体的参考我可以引用上述。 V8源代码当然可以在V8网站上find ,但是对于数组可能会回落到字典行为的所有地方来说,V8源代码可能比您(或我)要做的工作要多。 🙂