如何在Node.js中增加最大调用堆栈大小

tho*_*ter 39 stack-overflow callstack node.js

这与Node中读取RangeError的错误消息的其他问题不同:超出最大调用堆栈大小我知道为什么我收到此错误消息.它正在发生,因为我正在递归,事实上已经发生了相当大的反复.

谢谢.

Joh*_*yHK 71

来自node --help:

node --max-stack-size=val
Run Code Online (Sandbox Code Playgroud)

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

node --stack-size=val
Run Code Online (Sandbox Code Playgroud)

  • 出于某种原因,我发现--stack-size为我工作,而不是--max-stack-size. (5认同)
  • 有相同的问题,如果增加堆栈大小,新的错误来 - 分段错误 (4认同)
  • 砰!!!等待10分钟才能接受,但是是the。谢谢。 (3认同)
  • »这似乎是一个常见的误解,但 --stack_size=... 不会改变堆栈的大小,它告诉 Node/V8 它有多大。如果您将其设置为大于实际大小的值,则会超出。« - https://github.com/nodejs/node/issues/17416#issuecomment-348545847 (2认同)

Flo*_*gly 12

在节点版本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
Run Code Online (Sandbox Code Playgroud)

要增加最大堆栈大小,只需发出以下内容:

$ node --stack_size=1200
Run Code Online (Sandbox Code Playgroud)

如其他人所述,请注意增加此值可能会导致分段错误.对于版本6,我的最大安全值是1361,但在版本5中似乎更高.

从更大的角度来看,增加堆栈大小可能无法解决您的所有问题.在节点中编写递归函数时,最好的策略是以尾递归 方式编写它们,因为版本6支持正确的尾调用.这将消除堆栈大小溢出.