Pourquoi une boucle sur un tableau de 240+ éléments est-elle 10 fois plus lente en Rust ?
Bonjour, collègues. J'apprends Rust et j'ai rencontré un comportement inexplicable à mon avis. J'ai écrit un simple benchmark : je somme les éléments d'un tableau dans une boucle `for`. Pour les tableaux de taille jusqu'à 239 éléments, tout vole (moins de 1 µs). Dès que la taille atteint 240, le temps d'exécution augmente brusquement à 10–15 µs. Une augmentation supplémentaire de la taille donne une augmentation progressive du temps, mais ce premier saut de 10 fois m'a intrigué.
Voici le code que je teste :
```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());
}
```
Je compile avec `cargo build --release`. J'ai essayé de changer le type des éléments en `i64` — l'effet persiste. J'ai essayé différentes tailles : 239 — rapide, 240 — lent. Quelle pourrait en être la cause ? Est-ce une particularité de LLVM ?