61

这与其他关于 Node 中读取RangeError: Maximum call stack size exceeded的错误消息的问题不同,因为我确切地知道为什么会收到此错误消息。发生这种情况是因为我在递归,实际上递归了很多。

谢谢。

4

2 回答 2

88

来自node --help

node --max-stack-size=val

更新:正如评论所指出的,即使帮助文本仍然列出了该--max-stack-size选项,在节点 v0.10.x 中您也需要使用它--stack-size

node --stack-size=val
于 2012-07-04T16:05:31.193 回答
24

在节点版本 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 中编写递归函数时,最好的策略是以尾递归 方式编写它们,因为版本 6 支持正确的尾调用。这将消除堆栈大小溢出。

于 2017-07-06T07:06:19.787 回答