Por que em Rust um loop sobre um array de 240+ elementos é 10 vezes mais lento?
Olá, colegas. Estou estudando Rust e me deparei com um comportamento inexplicável, na minha opinião. Escrevi um benchmark simples: somo os elementos de um array em um loop `for`. Para arrays de até 239 elementos, tudo voa (menos de 1 μs). Assim que o tamanho chega a 240, o tempo de execução aumenta abruptamente para 10–15 μs. O crescimento adicional do tamanho dá um aumento suave no tempo, mas esse primeiro salto de 10 vezes me deixou perplexo.
Aqui está o código que estou testando:
```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());
}
```
Estou compilando com `cargo build --release`. Tentei mudar o tipo dos elementos para `i64` — o efeito persiste. Tentei tamanhos diferentes: 239 — rápido, 240 — lento. Qual pode ser o problema? É uma peculiaridade do LLVM?