rust - 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
[...]
我想知道这种行为差异来自哪里?发布与调试模式的堆栈大小是否不同?或者这是因为我缺少一些编译时优化(如果是这样,那么优化是什么?)
解决方案
是的,根据x86-64 上的 Godbolt,在调试模式下为函数保留的堆栈大小是 120 字节,启用优化 ( -O
) 它是 72 字节。这是很正常的。
推荐阅读
- arrays - 指向 c 中二维数组增量的指针
- javascript - 返回两点之间的距离并将其分配给位置列表上的数据属性
- etl - informatica:为什么我在使用 iif 函数时出错?
- c# - 带有 Google 云错误 CS1003 的 asp.net core 5 的自定义运行时 dockerfile:语法错误,
- selenium - 如何在 Extent Report 5 中自定义仪表板图表和测试步骤
- java - 在 csv 文件 java 的末尾附加列
- flutter - Flutter中如何无限滚动分页?
- javascript - 如何在一个地方管理我的所有脚本标签以分布在 Node.js 中的多个 HTML 文件中?
- python-3.x - 从 SQlite3 数据库查询返回字典返回 sqlite3.Row 错误
- url - Pannellum 设置热点 url 目标