You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust是否会对发散函数的尾调用执行跳转优化?

你编写的Rust代码如下:

fn a() -> ! {
    b()
}

fn b() -> ! {
    loop {}
}

问题解答

  • 你观察到的callq调用是debug构建模式的特有表现:debug模式默认关闭绝大多数编译优化,会保留完整调用栈信息以支撑调试需求,所以不会对这类调用做跳转优化,该表现并非固定存在。
  • release优化模式下会生成直接跳转:!是Rust的永不返回类型,会明确向编译器传递语义:b()执行后永远不会回到a()的执行流,不需要保留返回地址,也不需要处理调用后的返回逻辑。因此编译器可以安全地将这个尾调用优化为jmp指令,不会产生额外的栈帧开销。
  • 部分场景下甚至会直接内联逻辑:你示例中的b()仅包含空死循环,release模式下编译器可能直接将死循环逻辑内联到a()中,连跳转指令都可以省略,a()的汇编会直接对应死循环逻辑。

内容的提问来源于stack exchange,提问作者ruza-net

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:12:00