似乎为C程序或Ruby程序(使用C堆栈)设置堆栈大小的推荐方法是ulimit在Bash shell中使用.但
$ ulimit -s
8192
$ ulimit -s 16384
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
并sudo没有帮助.有没有办法将其设置为16MB,32MB或64MB?我认为应该有一种方法来设置每个程序调用,而不是设置系统范围的参数?
现在8192可能意味着8MB这是非常小的,如果将其与进程可以使用的数量进行比较,有时甚至高达2GB的RAM.
(更新的注释: ulimit -a可以显示其当前值).
(更新2:它实际上似乎ulimit -s <value>是每个shell,如果你第一次设置它,它通常会工作.问题是当你第二次设置它,然后它可能会返回一个错误)
当试图运行构建一个大的程序clap::App(在这里找到源代码)时,我得到一个stackoverflow : thread '<main>' has overflowed its stack.
到目前为止,我无法弄清楚如何指示rustc增加堆栈大小的强力解决方法.RUST_MIN_STACK似乎只适用于运行时,即使它似乎没有任何影响.
在生成代码时,我可能要做的就是将SubCommand创建移动到运行时,这是我接下来要尝试的.
但是,您是否看到了以不同方式解决此问题的方法?
如果构建的模式看起来容易出现这个问题,那么构建这个问题似乎非常重要,如果构建的结构只是很大并且足够嵌套.
git clone -b clap https://github.com/Byron/google-apis-rs
cd google-apis-rs
git checkout 9a8ae4b
make dfareporting2d1-cli-cargo ARGS=run
Run Code Online (Sandbox Code Playgroud)
请注意,您将需要我的准叉并在本地设置覆盖以允许使用最新的编译器进行构建.
? google-apis-rs git:(clap) rustc --version
rustc 1.1.0-nightly (97d4e76c2 2015-04-27) (built 2015-04-28)
Run Code Online (Sandbox Code Playgroud)