web-dev-qa-db-ja.com

Node.jsで最大呼び出しスタックサイズを増やす方法

これは、Node RangeError:Maximum call stack size exceededというエラーメッセージに関する他の質問とは異なります。このエラーメッセージが表示される理由を正確に知っているからです。 。それは私が再帰しているために起こっています。

ありがとう。

38
thomas-peter

node --helpから:

node --max-stack-size=val

更新:コメントが示すように、ヘルプテキストにはまだ--max-stack-sizeオプションがリストされていますが、ノードv0.10.xでは、代わりに--stack-sizeを使用する必要があります。

node --stack-size=val
69
JohnnyHK

ノードバージョン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ではより高いようです。

全体像を見ると、スタックサイズを大きくしても問題がすべて解決しない場合があります。ノードで再帰関数を記述する場合、バージョン6は適切な末尾呼び出しをサポートするため、最良の戦略は tail-recursivemanner で記述することです。これにより、スタックサイズのオーバーフローが解消されます。

11
Florent Angly