Avatar ·

لماذا تعمل حلقة Rust على مصفوفة تحتوي على 240+ عنصرًا أبطأ بمقدار 10 مرات؟

مرحبًا أيها الزملاء. أنا أدرس Rust وواجهت سلوكًا غير مفهوم في رأيي. كتبت اختبار أداء بسيطًا: أجمع عناصر المصفوفة في حلقة `for`. بالنسبة للمصفوفات التي يصل حجمها إلى 239 عنصرًا، كل شيء يعمل بسرعة (أقل من 1 ميكروثانية). بمجرد أن يصل الحجم إلى 240، يزداد وقت التنفيذ فجأة إلى 10–15 ميكروثانية. النمو الإضافي في الحجم يعطي زيادة تدريجية في الوقت، لكن هذه القفزة الأولى بمقدار 10 مرات حيرتني. إليك الكود الذي اختبرته: ```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()); } ``` أقوم بالتجميع باستخدام `cargo build --release`. جربت تغيير نوع العناصر إلى `i64` — التأثير استمر. جربت أحجامًا مختلفة: 239 — سريع، 240 — بطيء. ما المشكلة؟ هل هي ميزة في LLVM؟