是否有必要使用“inline(never)”属性来标记负责消除通用开销的函数?

问题描述 投票:0回答:1

这是否足以防止以调用函数为代价的通用开销?还是需要指定

#[inline(never)]

fn foo<T: Add<i32>>(a: i32, b: T) -> i32 {
    fn static_ops(a: i32) -> i32 {
        a += 99;
        if a % 100 == 0 {
            println!("Static output{a}");
        }
        a *= a;
        a
    }

    a = static_ops(a);
    b + a
}

这段代码会有同样的要求吗?

fn foo<T: Add<i32>>(a: i32, b: T) -> i32 {
    let static_ops = |a: i32| -> i32 {
        a += 99;
        if a % 100 == 0 {
            println!("Static output{a}");
        }
        a *= a;
        a
    }

    a = static_ops(a);
    b + a
}
rust attributes inline compiler-optimization
1个回答
0
投票

不仅不能使用

#[inline(never)]
,使用它也是一个错误。您不希望编译器不内联该函数,它会消除优化机会。

但是,请重新考虑分离该功能。它降低了可读性。仅当您的函数被多次使用时才这样做。

© www.soinside.com 2019 - 2024. All rights reserved.