Rust:#[inline] 是做什么的?

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

我在遇到 #[inline] 后阅读了 The rust Performance book 摘录,但有些观点对我来说仍然不清楚(我可能只是缺少上下文/经验)。

#[inline] 是否仅具有性能影响并且在任何情况下都不会改变程序行为?

你能举出一个简单的例子来说明 #[inline] 会降低性能吗?存在吗?

rust
1个回答
0
投票

#[inline] 是否仅具有性能影响并且在任何情况下都不会改变程序行为?

是的。

#[inline]
是优化器的提示。如果它改变了程序行为,您就会遇到编译错误(或未定义的行为)。

你能举出一个简单的例子来说明 #[inline] 会降低性能吗?存在吗?

很难举出一个例子,因为

#[inline]
只是一个提示,优化器可以随意忽略它。更容易举一个
#[inline(always)]
使性能恶化的例子(仍然是一个提示,但更强),但即使这样也不是微不足道的,因为影响是间接的:更多的指令缓存压力(只会在较大的情况下出现)程序,而不是小例子),以及其他微架构问题。

根据经验,将

#[inline]
放在跨越板条箱边界的小函数上。如果它们不跨越板条箱边界,这可以提高性能,但通常不会。如果它们很大,这可能会降低性能或者会出现 nop。
#[inline(always)]
#[inline(never)]
几乎不应该被使用,唯一的例外是当你有理由相信你比优化器更了解时(例如,一个非常大的函数,但仅使用常量输入来调用,这将使其优化到小),理想情况下这应该带有一个基准。

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