ما معنى أن الكود «صديق للذاكرة المؤقتة» وكيف يؤثر ذلك على أداء C++؟
مرحبًا! أدرس لغة C++ وقد صادفت مصطلح «cache-friendly» (صديق للذاكرة المؤقتة). كثيرًا ما أرى في مناقشات الأداء أن الكود يجب أن يكون صديقًا للذاكرة المؤقتة، لكنني لا أفهم تمامًا ما يعنيه ذلك عمليًا.
لدي مثال بسيط. أعمل مع مصفوفات 1000×1000 (int). إليك نسختان من الكود لجمعها:
النسخة 1: حسب الصفوف
```cpp
int sum = 0;
for (int i = 0; i < 1000; ++i)
for (int j = 0; j < 1000; ++j)
sum += matrix[i][j];
```
النسخة 2: حسب الأعمدة
```cpp
int sum = 0;
for (int j = 0; j < 1000; ++j)
for (int i = 0; i < 1000; ++i)
sum += matrix[i][j];
```
النسخة الأولى تعمل أسرع بـ 5–10 مرات على جهازي! قرأت أن هذا مرتبط بالتخزين المؤقت، لكن لماذا هذا الفرق الكبير؟ كيف يمكنني تحديد ما إذا كان الكود صديقًا للذاكرة المؤقتة؟ وكيف أكتب هذا الكود بوعي، وليس فقط حفظ الأنماط؟
سأكون ممتنًا لشرح مفصل مع أمثلة.
<<>>