如何增加 Rust 库可用的堆栈大小?
How to increase the stack size available to a Rust library?
我正在玩 lambda 演算,希望有更多的堆栈 space 以便能够构建和计算(非常)长的函数链。有没有办法为板条箱增加它,类似于增加递归限制(#![recursion_limit = "100"]
)?
crate 是一个库,无论目标操作系统如何,我都希望它能够执行堆栈密集型操作。
这不是语言功能,而是操作系统功能。在 *nix 系统上,您将使用像 ulimit
这样的工具。其他系统可能使用其他工具:
- How to change the stack size using ulimit or per process on Mac OS X for a C or Ruby program?
- How to increase stack size permanently on Windows 7?
经过一些研究,我得出结论,没有一种通用的方法可以实现我所追求的目标,但是使用 std::thread::Builder
我能够创建一个具有指定堆栈大小的额外线程并执行堆栈重载其中的操作:
fn huge_reduction() {
let builder = thread::Builder::new()
.name("reductor".into())
.stack_size(32 * 1024 * 1024); // 32MB of stack space
let handler = builder.spawn(|| {
// stack-intensive operations
}).unwrap();
handler.join().unwrap();
}
我正在玩 lambda 演算,希望有更多的堆栈 space 以便能够构建和计算(非常)长的函数链。有没有办法为板条箱增加它,类似于增加递归限制(#![recursion_limit = "100"]
)?
crate 是一个库,无论目标操作系统如何,我都希望它能够执行堆栈密集型操作。
这不是语言功能,而是操作系统功能。在 *nix 系统上,您将使用像 ulimit
这样的工具。其他系统可能使用其他工具:
- How to change the stack size using ulimit or per process on Mac OS X for a C or Ruby program?
- How to increase stack size permanently on Windows 7?
经过一些研究,我得出结论,没有一种通用的方法可以实现我所追求的目标,但是使用 std::thread::Builder
我能够创建一个具有指定堆栈大小的额外线程并执行堆栈重载其中的操作:
fn huge_reduction() {
let builder = thread::Builder::new()
.name("reductor".into())
.stack_size(32 * 1024 * 1024); // 32MB of stack space
let handler = builder.spawn(|| {
// stack-intensive operations
}).unwrap();
handler.join().unwrap();
}