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

为何Rust中直接格式化值与引用值会生成不同汇编代码?

关于format!("{}", v)与format!("{}", &v)的性能差异疑问

我之前(认知有限)认为format!("{}", v)与format!("{}", &v)本质完全相同,应该生成一致的汇编代码并拥有相同性能,这一认知来自《Does println! borrow or own the variable?》一文。但对比以下两个函数的汇编代码时,却发现二者存在差异:

pub fn bar(j: i32) -> String {
    format!("bar {}", j)
}

// vs

pub fn foo(i: i32) -> String {
    format!("foo {}", &i)
}

运行基准测试后,二者性能有约6%的差异。请问这是预期情况,还是Rust编译器存在优化缺失?亦或是存在需要生成不同代码的边缘场景?

相关参考

  • 曾有人提议给Clippy添加lint规则,用于统一此类写法的规范
  • Rust编译器的Bug追踪系统中也有针对该问题的相关记录

内容的提问来源于stack exchange,提问作者Yuri Astrakhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:52:44