Как увеличить максимальный размер стека вызовов в Node.js
Это отличается от других вопросов, касающихся сообщения об ошибке в Node, который читает RangeError: Максимальный размер стека вызовов, поскольку я точно знаю, почему я получаю это сообщение об ошибке. Это происходит из-за того, что я рекурсивно рекурсивно рекурсивно.
Спасибо.
Ответы
Ответ 1
От node --help
:
node --max-stack-size=val
Обновление: как указывают комментарии, хотя текст справки по-прежнему отображает параметр --max-stack-size
, в node v0.10.x вместо этого вам нужно использовать --stack-size
.
node --stack-size=val
Ответ 2
В node версии 5 и 6 я подтвердил, что опция установить максимальный размер стека - "--stack_size" (с подчеркиванием):
$ node --v8-options
[...]
--stack_size (default size of stack region v8 is allowed to use (in kBytes))
type: int default: 984
Чтобы увеличить максимальный размер стека, просто введите что-то вроде:
$ node --stack_size=1200
Как отмечают другие, имейте в виду, что увеличение этого значения может привести к ошибке сегментации. Максимальное безопасное значение для меня с версией 6 - 1361, но, похоже, с версией 5.
Если посмотреть на картинку большего размера, увеличение размера стека может не решить все ваши проблемы. При написании рекурсивных функций в node ваша лучшая стратегия заключается в том, чтобы записать их в tail-recursive , поскольку версия 6 поддерживает правильные хвостовые вызовы. Это устраняет.