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

开启优化选项时rustc是否总会忽略#[inline(never)]属性?

Rust #[inline(never)] 属性生效验证方法

所有测试均在-C opt-level=2优化等级下执行,排除零优化默认不内联的干扰。

基准测试(无#[inline(never)]属性)

代码如下:

fn x() -> i32 {
    21
}

pub fn main() -> i32 {
    x()
}

该场景下编译器判定x函数适合内联,最终汇编输出直接优化掉了函数调用:

example::main:
        mov     eax, 21
        ret

对比测试(添加#[inline(never)]属性)

仅给x函数添加阻止内联的属性:

#[inline(never)]
fn x() -> i32 {
    21
}

pub fn main() -> i32 {
    x()
}

此时编译器会遵守属性要求,阻止内联行为,保留独立的x函数定义,main函数中保留call调用逻辑,汇编输出如下:

example::x:
        mov     eax, 21
        ret

example::main:
        push    rax
        call    example::x
        pop     rcx
        ret

补充说明

  • 零优化等级(-C opt-level=0)下Rust默认不会执行任何内联操作,无论是否添加#[inline(never)]都不会看到效果差异
  • 常规优化等级下#[inline(never)]属于高优先级编译提示,除开启全程序LTO等极端优化场景外,编译器都会遵守该属性要求

内容的提问来源于stack exchange,提问作者Kyle McLean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:06:03