【发布时间】:2015-08-29 02:53:58
【问题描述】:
我为在 Ubuntu 中运行 Ruby 2.1 的课程编写了一个算法实现。该算法最容易使用递归来表达。最初,由于问题和实现需要大量内存,Ruby 提出了“stack level too deep SystemStack”异常。为了让算法完成,我使用了以下命令来增加允许的堆栈大小:
export RUBY_THREAD_VM_STACK_SIZE=16000000
ulimit -s 128000
请注意,以上两个命令都必须运行。 RUBY_THREAD_VM_STACK_SIZE 的单位是字节,ulimit 的单位是 kBytes。所以 RUBY_THREAD_VM_STACK_SIZE 限制为 ~16MBytes,ulimit 限制为 ~128MBytes。如果我将任一限制减少一半,则此处显示的值将不会在没有例外的情况下完成。
有人能解释一下为什么这些限制相差约 8 倍吗?
我已经检查了我能做的事情,但似乎不是因为其中一个单位是 kbits 而不是 kBytes。谢谢!
【问题讨论】:
-
你在使用线程吗?
标签: ruby linux bash recursion ulimit