考虑以下程序:
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
[...]
我想知道这种行为差异来自哪里?发布与调试模式的堆栈大小是否不同?或者这是因为我缺少一些编译时优化(如果是这样,那么优化是什么?)