首页 > 解决方案 > Rust - 调试与发布模式的堆栈大小不同吗?

问题描述

考虑以下程序:

fn recursive_call(x: u32) -> u32 {
    println!("x: {:?}", x);
    recursive_call(x +1)
}

fn main() {
    recursive_call(0);
}

当我运行时cargo build && ./target/debug/recursive_call,这会在以下情况下崩溃x: 58152

x: 58152

thread 'main' has overflowed its stack
fatal runtime error: stack overflow
Aborted (core dumped)

而当我跑步时 cargo build --release && ./target/release/recursive_call,这只会在以下情况下崩溃x: 104728

x: 104728

thread 'main' has overflowed its stack
[...]

我想知道这种行为差异来自哪里?发布与调试模式的堆栈大小是否不同?或者这是因为我缺少一些编译时优化(如果是这样,那么优化是什么?)

标签: ruststack-size

解决方案


是的,根据x86-64 上的 Godbolt,在调试模式下为函数保留的堆栈大小是 120 字节,启用优化 ( -O) 它是 72 字节。这是很正常的。


推荐阅读