Avatar ·

Warum ist eine Schleife über ein Array mit 240+ Elementen in Rust 10-mal langsamer?

Hallo Kollegen. Ich lerne Rust und bin auf ein für mich unerklärliches Verhalten gestoßen. Ich habe einen einfachen Benchmark geschrieben: Ich summiere Array-Elemente in einer `for`-Schleife. Für Arrays mit bis zu 239 Elementen läuft alles blitzschnell (weniger als 1 µs). Sobald die Größe 240 erreicht, steigt die Ausführungszeit sprunghaft auf 10–15 µs. Weiteres Vergrößern der Größe führt zu einem allmählichen Anstieg der Zeit, aber dieser erste Sprung um das 10-fache hat mich verblüfft. Hier ist der Code, den ich 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()); } ``` Ich kompiliere mit `cargo build --release`. Ich habe versucht, den Elementtyp auf `i64` zu ändern – der Effekt bleibt bestehen. Ich habe verschiedene Größen ausprobiert: 239 – schnell, 240 – langsam. Woran könnte das liegen? Ist das eine Besonderheit von LLVM?