【发布时间】:2016-05-24 16:30:26
【问题描述】:
简短的问题:我有一个非常深入递归的 javascript。如何增加堆栈大小以便我可以执行它(在 Unix 系统中类似于“ulimit -s unlimited”)?
长话短说:我必须绘制一个图表,我使用 Cytoscape JS (http://js.cytoscape.org/) 和 Dagre 布局扩展 (https://github.com/cytoscape/cytoscape.js-dagre)。绘图算法深入递归,我最终在 Chrome 中得到“未捕获的 RangeError:超出最大调用堆栈大小”,在 Firefox 中得到“递归过多”。如何将堆栈大小设置为无限制或非常大(例如 Unix 系统中的“ulimit -s unlimited”)以便绘制图形?
谢谢!
【问题讨论】:
-
你确定你的算法是正确的吗?您是否计算过堆栈空间不足时的嵌套调用次数?这是一个合理的数字吗?
-
是的,算法是正确的。问题是图有点大,绘图算法深入递归。但是,使用其他绘图算法(不使用递归),我能够相当快地绘制它......所以我假设如果我可以将堆栈大小增加到相当大的大小,我将能够绘制它.我搜索了,但找不到任何答案...在最坏的情况下,我需要修改 Dagre 算法以将其从递归更改为迭代...但我想检查是否有任何设置堆栈的方法浏览器javascript引擎的大小限制。
-
添加更多上下文,在这里您可以找到几个浏览器的堆栈大小限制:stackoverflow.com/questions/7826992/…。我只需要增加这个限制。
-
但是,您能否报告一下您在内存不足之前的嵌套调用次数?
-
你好。我正在使用第三方库,并且有几个函数深入递归。其中一个进行了大约 3000 个级别,但是为此更改整个库对我来说是不切实际的。我现在有一个解决方法,它涉及通过使用 --js-flags="--stack_size x" 命令行参数调用它来更改 Google Chrome 的堆栈大小,并带有一个大 x。非常感谢您的帮助。
标签: recursion stack size cytoscape.js cytoscape-web