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 seltsames Performance-Problem beim Durchlaufen von Arrays gestoßen. Ich habe einen einfachen Benchmark geschrieben, der die Elemente eines Arrays in einer `for`-Schleife summiert. Für Arrays mit weniger als 240 Elementen wird der Code sehr schnell ausgeführt, aber sobald die Größe 240 oder mehr erreicht, fällt die Leistung drastisch ab – etwa um den Faktor 10. Hier ist mein Code: ```rust 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 = std::time::Instant::now(); let result = sum_array(&arr); let duration = start.elapsed(); println!("Summe: {}, Zeit: {:?}", result, duration); } ``` Ich habe versucht, `size` von 239 auf 240 zu ändern, und der Unterschied ist enorm. Zuerst dachte ich, es läge am CPU-Cache, aber dann sollte der Abfall allmählich und nicht sprunghaft sein. Ich verwende Rust 1.75 und kompiliere mit `--release`. Vielleicht ist es ein LLVM-Bug?