cpp / intermediate
Snippet
Zeilenweise Cache-Lokalität in 2D-Arrays
In C++ werden mehrdimensionale Arrays in zeilenweiser Reihenfolge (row-major) gespeichert. Der Zugriff Zeile für Zeile ist wesentlich schneller als Spalte für Spalte, da er den CPU-Cache effektiver nutzt, indem er auf aufeinanderfolgende Speicheradressen zugreift.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>const int SIZE = 1000;int main() {int matrix[SIZE][SIZE] = {0};long long total = 0;// Row-major traversal is faster due to spatial localityfor (int i = 0; i < SIZE; ++i) {for (int j = 0; j < SIZE; ++j) {total += matrix[i][j];}}std::cout << "Sum: " << total << std::endl;return 0;}
Erklärung
1
int matrix[SIZE][SIZE] = {0};
Allokiert einen zusammenhängenden Speicherblock für ein 2D-Array auf dem Stack.
2
total += matrix[i][j];
Greift auf Elemente in der Reihenfolge zu, in der sie im Speicher liegen, was Cache-Treffer maximiert.