我编写了一个生成数组的小程序,它运行的时间很长(几乎永远;-)):
var results = [];
var i = 1;
while (true) {
console.log(i++);
results.push([]);
}
当我创建一个长度为的稀疏数组而不是空数组时,i
程序崩溃得非常快:
var results = [];
var i = 1;
while (true) {
console.log(i);
results.push(new Array(i++));
}
实际上我达到i
等于 17424,然后我收到一条错误消息告诉我
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
Abort trap: 6
Node.js 将我带回控制台。由于唯一的区别是第二个产生比第一个“更大”的空数组,这意味着长度为空的稀疏数组n
占用n
的空间是长度为的空数组的空间1
。
我对此是否正确(特别是对于 Node.js)?
还有一个问题:如果我跑步
var results = [];
var i = 1;
while (true) {
console.log(i);
var temp = [];
temp[i++] = i;
results.push(temp);
}
然后我达到 1286175,然后它再次崩溃:
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
Abort trap: 6
为什么这与其他两个选项的行为不同?
PS:我正在使用 Node.js 0.12.0 在 OS X 上运行它。