ما معنى الكود "cache-friendly" وكيفية كتابة برامج فعالة بلغة C++؟
مرحبًا بالجميع! أنا مطور C++ مبتدئ، أكتب برامج صغيرة لمعالجة البيانات. مؤخرًا صادفت مصطلح "cache-friendly" (صديق للذاكرة المؤقتة) وأدركت أن برامجي ربما تعمل بشكل أبطأ مما ينبغي.
لدي مثال بسيط: أقوم بمعالجة مصفوفة ثنائية الأبعاد بحجم 10000×10000. الطريقة الأولى — الاجتياز عبر الصفوف (الحلقة الخارجية i، الداخلية j). الطريقة الثانية — الاجتياز عبر الأعمدة (الحلقة الخارجية j، الداخلية i). على حاسوبي المحمول، الطريقة الأولى تنفذ في 0.3 ثانية، بينما الثانية في 2.5 ثانية! الفرق يقارب 8 مرات، رغم أن الكود يفعل نفس الشيء.
إليك الكود للتوضيح:
```cpp
const int N = 10000;
int arr[N][N];
// الخيار 1: عبر الصفوف (سريع)
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = i * j;
}
}
// الخيار 2: عبر الأعمدة (بطيء)
for (int j = 0; j < N; j++) {
for (int i = 0; i < N; i++) {
arr[i][j] = i * j;
}
}
```
لماذا هذا الفرق الهائل؟ ما الذي يجعل الكود "c