cpp / expert
Snippet
Strided-Array-Zugriff zur Puffer-Navigation
Eine manuelle Implementierung von Strided-Access über ein flaches Array. Dies ist essenziell für die Verarbeitung mehrdimensionaler Daten (wie Bildkanäle oder Matrixspalten), die in einem zusammenhängenden Speicherblock liegen.
snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstddef>#include <vector>class StridedView {int* data;std::size_t stride;public:StridedView(int* ptr, std::size_t s) : data(ptr), stride(s) {}int& operator[](std::size_t index) {return data[index * stride];}};int main() {int raw_data[] = {1, 0, 0, 2, 0, 0, 3, 0, 0};StridedView view(raw_data, 3);// view[0] is 1, view[1] is 2, view[2] is 3}
Erklärung
1
data[index * stride]
Berechnet die effektive Speicheradresse, indem pro logischem Schritt eine feste Anzahl von Elementen übersprungen wird.
2
int* data;
Speichert einen Zeiger auf den Anfang des Puffers für flexibles manuelles Memory-Mapping.