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

编译后的Rust代码汇编输出为何无实际汇编指令?

问题

我在Compiler Explorer中编写了如下Rust代码片段:

fn foo() -> u8 {
    54
}

fn bar() -> u128 {
    3423
}

fn main() {
    let a: (u8, u128) = (foo(), bar());
    println!("foo result: {}", a.0);
    println!("bar result: {}", a.1);
}

生成的汇编输出仅包含汇编伪指令,无实现上述函数的实际汇编指令。请问是我使用Compiler Explorer的方式有误(如未设置正确编译标志)?

回答

这是因为Rust编译器默认开启了优化,把foo和bar这类简单函数直接内联到main里了,所以单独的函数实现汇编就被消除了。你可以通过两种方式调整设置来看到完整的函数汇编:

  • 将编译等级从默认的-O(优化模式)改为-C opt-level=0(无优化模式),这样编译器会保留每个函数的独立实现,不会做内联优化
  • 如果想保留优化但仍看到foo和bar的独立汇编,可以给这两个函数加上#[no_mangle]属性,强制编译器保留函数的原始符号和独立实现,修改后的代码如下:
#[no_mangle]
fn foo() -> u8 {
    54
}

#[no_mangle]
fn bar() -> u128 {
    3423
}

fn main() {
    let a: (u8, u128) = (foo(), bar());
    println!("foo result: {}", a.0);
    println!("bar result: {}", a.1);
}

另外,Compiler Explorer默认会过滤掉标准库相关的冗余汇编,你可以在右侧输出选项里勾选"Show all assembly"查看完整汇编内容,但核心问题还是优化导致的函数内联。

内容的提问来源于stack exchange,提问作者Amir reza Riahi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:57:22