为什么在 Rust 中遍历超过 240 个元素的数组会慢 10 倍?
大家好!我正在学习 Rust,在遍历数组时遇到了一个奇怪的性能问题。我写了一个简单的 benchmark,用 `for` 循环对数组元素求和。当数组大小小于 240 个元素时,代码执行得非常快,但一旦大小达到 240 或更大,性能就会急剧下降——大约慢 10 倍。这是我的代码:
```rust
fn sum_array(arr: &[i32]) -> i32 {
let mut sum = 0;
for &x in arr {
sum += x;
}
sum
}
fn main() {
let size = 240;
let arr: Vec = (0..size).collect();
let start = std::time::Instant::now();
let result = sum_array(&arr);
let duration = start.elapsed();
println!("Sum: {}, Time: {:?}", result, duration);
}
```
我尝试将 `size` 从 239 改为 240,差异巨大。起初我以为是 CPU 缓存的问题,但如果是这样,性能下降应该是渐进的,而不是突变的。我使用的是 Rust 1.75,编译时加了 `--release`。这可能是 LLVM 的 bug 吗?