Por qué en Rust un bucle sobre un array de más de 240 elementos es 10 veces más lento
Saludos, colegas. Estoy aprendiendo Rust y me encontré con un comportamiento inexplicable, en mi opinión. Escribí un benchmark simple: sumo los elementos de un array en un bucle `for`. Para arrays de hasta 239 elementos, todo vuela (menos de 1 μs). En cuanto el tamaño llega a 240, el tiempo de ejecución aumenta abruptamente a 10–15 μs. Un crecimiento adicional del tamaño da un aumento gradual del tiempo, pero este primer salto de 10 veces me tiene desconcertado.
Aquí está el código que estoy probando:
```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());
}
```
Compilo con `cargo build --release`. Probé cambiar el tipo de elementos a `i64` — el efecto se mantiene. Probé diferentes tamaños: 239 — rápido, 240 — lento. ¿Cuál podría ser la causa? ¿Es una característica de LLVM?