0 Tage Serie
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 locality
for (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.