發佈上stackoverflow.com堆棧溢出的問題,:-)如何有趣如何增加一個紅寶石應用程序的堆棧大小。遞歸程序得到:堆棧層次過深(SystemStackError)
我跑了一些遞歸Ruby代碼和我得到的:"Stack level too deep (SystemStackError)"
(我很確定代碼的工作原理,我沒有處於無限的遞歸死亡螺旋,但這不是重點)
是否有更改我的Ruby應用程序允許的堆棧深度/大小?
如果這是Ruby中的限制,我不太明白,因爲錯誤顯示爲「堆棧級別」,這給我的印象是Ruby以某種方式計算堆棧的「級別」,或者它僅僅意味着堆滿了。
我已經嘗試在Vista和Ubuntu下運行該程序的結果相同。 在Ubuntu下,我試圖用'ulimit -s'從8192改爲16000,但這並沒有改變任何東西。
編輯: 感謝您的反饋。
我明白,使用遞歸函數可能不是最強大的方法。 但這也不是重點。 我只是想知道是否有辦法增加堆棧大小..期間。 正如我所說,我曾嘗試在運行ruby腳本之前運行ulimit -s 16000 ..沒有任何改進..我使用它錯了嗎?
編輯2: 我實際上在代碼的邊緣情況下有一個無限遞歸。
當您收到"Stack level too deep"
錯誤時截斷的紅寶石堆棧跟蹤有點令人誤解。
當涉及多個函數的遞歸行爲時,您會得到遞歸次數遠低於實際次數的印象。在這個例子中人們可能的事情,它經過多一點比190個電話崩潰,但它實際上是圍繞15000電話
tst.rb:8:in `p': stack level too deep (SystemStackError)
from tst.rb:8:in `bar'
from tst.rb:12:in `bar'
from tst.rb:19:in `foo'
from tst.rb:10:in `bar'
from tst.rb:19:in `foo'
from tst.rb:10:in `bar'
from tst.rb:19:in `foo'
from tst.rb:10:in `bar'
... 190 levels...
from tst.rb:19:in `foo'
from tst.rb:10:in `bar'
from tst.rb:19:in `foo'
from tst.rb:22
-Andreas
這個答案對於1.9以前的Ruby版本是正確的。對於1.9或更高版本,請參閱http://stackoverflow.com/a/27510458/238886 – 2016-06-12 14:39:06