我们说我们有这个对象:var a = {x: 3}
。
现在,如果我们有一个数组arr = [a]
来保存对这个对象的引用,arr[0]
实际存储的是对该对象的引用,而不是实际的对象数据。
我有许多对象(20k +),例如a
,我想跟踪它,可能每秒创建一个类似于arr
的数组。因为我希望内存分配尽可能高效,我能以某种方式告诉编译器我的数组只包含对a
之类的对象的引用吗?我想过使用类似TypedArray
的内容,但我不知道a
的引用是什么类型,我想我不能只使用new UInt32Array()
并实际存储每个索引a
。
在像C ++这样的语言中,您可以拥有一个指针数组,并且您始终知道指针的大小(例如:64位计算机上的8个字节)。
有没有办法有效地存储Array
或Object
中对象的引用/指针?
答案 0 :(得分:0)
我认为这回答了我自己的问题。我可以创建一个初始数组,添加我想要的元素,然后每当我需要一个新数组时,只需复制一个并更新元素。这样,引用的数据类型无关紧要,因为我可以直接分配数组所需的整个内存。
伪JavaScript中的示例:
var initialArray = [];
// push initial references into this array
// whenever I need a new array do:
var newArray = initialArray.slice();
// update references in the newArray
...
for i in newArray
newArray[i] = newRefi;
...
这样,newArray
在创建时将是正确的大小。
LE:虽然这在理论上有效,但它实际上会让性能变差,可能是因为现在创建newArray
现在必须复制内存并做其他疯狂的事情,而不仅仅是分配一些内存