在运行时获取Rust的默认栈大小

后端开发 2026-07-10

如何在运行时获取 默认的Rust堆栈大小

查看 rustc 代码,存在一个 pub static STACK_SIZE。但我如何从 stdcore 访问这个值?
我知道 堆栈大小因平台而异,所以我想在运行时获取当前平台的默认值。
理想情况下,使用稳定的API接口,而不是需要基于编译目标进行编译时分支的API调用。

我的目标是在创建线程之前确定线程的堆栈大小会是多少。

我尝试了一些路径,但它们没有编译通过;std::thread::STACK_SIZEstd::thread::DEFAULT_STACK_SIZEstd::thread::stack_size()std::thread::Builder::STACK_SIZE 等等。

解决方案

std::thread - 堆栈大小

堆栈大小

默认的堆栈大小是平台相关的,可能会变化。目前在所有Tier-1平台上都是2 MiB。

看起来你想要的功能目前似乎并未在API中提供。我建议将以下代码作为近似实现:

static DEFAULT_STACK_SIZE: LazyLock<usize> = LazyLock::new(|| {
    // https://github.com/rust-lang/rust/blob/a72e2a71d8fbcbc46cdd18784e2ab2c32cbd9c93/library/std/src/sys/thread/unix.rs#L26
    // https://github.com/rust-lang/rust/blob/a72e2a71d8fbcbc46cdd18784e2ab2c32cbd9c93/library/std/src/sys/thread/windows.rs#L14
    const DEFAULT_MIN_STACK_SIZE: usize = 2 * 1024 * 1024;

    // https://github.com/rust-lang/rust/blob/a72e2a71d8fbcbc46cdd18784e2ab2c32cbd9c93/library/std/src/thread/lifecycle.rs#L37-L39
    std::env::var_os("RUST_MIN_STACK")
        .and_then(|s| s.to_str().and_then(|s| s.parse().ok()))
        .unwrap_or(DEFAULT_MIN_STACK_SIZE)
});

Playground

你可能还希望实际设置线程的 stack_size 以保持一致性:

const STACK_SIZE: usize = 2 * 1024 * 1024;
std::thread::Builder::new().stack_size(STACK_SIZE).spawn(...)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章