gpt4 book ai didi

rust - 当使用优化时,rustc 是否总是忽略内联(从不)?

转载 作者:行者123 更新时间:2023-12-02 01:52:33 31 4
gpt4 key购买 nike

我有以下 Rust 代码:

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

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

如果没有优化 (-C opt-level=0),即使删除了 #[inline(never)],函数调用也不会内联。

example::x:
mov eax, 21
ret

example::main:
push rax
call example::x
mov dword ptr [rsp + 4], eax
mov eax, dword ptr [rsp + 4]
pop rcx
ret

但是,任何其他优化级别都会导致函数内联,无论如何。

example::main:
mov eax, 21
ret

我知道 inline 属性只是对编译器的建议,但我似乎找不到任何使用 #[inline(never)] 的示例实际上会阻止函数被内联,否则它会被内联。

这是编译器资源管理器结果:https://godbolt.org/z/WKfevdW37

最佳答案

如果我不得不猜测,一个没有副作用的函数(例如,您可以将其标记为 const fn ,没有任何错误)被视为与内联分开的特殊优化。如果你给x一个副作用(例如打印一些东西),那么inline(never)将会产生效果:

#[inline(never)]
fn x() -> i32 {
println!("foo");
21
}

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

这不会内联在 opt-level=0opt-level=2 中,但如果您删除 inline(never) >,然后它将内联到 opt-level=2 中。

关于rust - 当使用优化时,rustc 是否总是忽略内联(从不)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70054759/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com