为什么在 Rust 中遍历 240 个以上元素的数组会慢 10 倍?
各位同仁,你们好。我正在学习 Rust,遇到了一个在我看来无法解释的行为。我写了一个简单的基准测试:在 `for` 循环中对数组元素求和。对于大小不超过 239 的数组,一切飞快(小于 1 微秒)。一旦大小达到 240,执行时间会突然增加到 10–15 微秒。进一步增大尺寸会导致时间平稳增长,但第一个 10 倍的跳跃让我困惑。
以下是我测试的代码:
```rust
use std::time::Instant;
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 = Instant::now();
let _ = sum_array(&arr);
println!("{:?}", start.elapsed());
}
```
我使用 `cargo build --release` 编译。尝试将元素类型改为 `i64`——效果依然存在。尝试了不同大小:239 快,240 慢。问题可能出在哪里?这是 LLVM 的特性吗?