Я написал небольшую программу, которая производит массивы, которая работает достаточно долго (почти вечно ;-)):памяти разреженных массивов в Node.js
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.
Я не вижу разреженного массива. Возможно, вы захотите удалить этот тег. – monocell
Я обновил свой вопрос. –