为何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
相关产品推荐
相关产品推荐

