何时以及为何在 Rust 中使用 `#[inline]` 属性?它真的必要吗?
大家好!我是 Rust 新手,正在尝试理解优化。我读到在 C/C++ 中,`inline` 关键字可以通过将函数调用替换为函数体来加速代码。Rust 中也有 `#[inline]` 属性,但我不完全理解何时使用它。
我写了一个简单的两数相加函数:
```rust
fn add(a: i32, b: i32) -> i32 {
a + b
}
```
以及另一个在循环中调用它的函数:
```rust
fn sum_squares(n: i32) -> i32 {
let mut sum = 0;
for i in 0..n {
sum += add(i, i);
}
sum
}
```
如果我对 `add` 添加 `#[inline(always)]`,这会有意义吗?编译器自己不会想到吗?或者相反,`#[inline(never)]` 可能有助于减小二进制文件的大小?
我看到 Rust 标准库中有些函数标记了 `#[inline]`,但不是全部。这意味着需要谨慎使用。作为开发者,如何决定是否在代码中插入 `#[inline]`?有没有一些经验法则,或者这总是过早优化?