capypad
0 Tage Serie
c / expert
Snippet

Strict Aliasing und das restrict-Schlüsselwort

Strict Aliasing erlaubt es dem Compiler anzunehmen, dass Zeiger unterschiedlicher Typen nicht denselben Speicherbereich referenzieren. Der 'restrict'-Qualifizierer (C99) informiert den Compiler explizit darüber, dass während der Lebensdauer des Zeigers nur dieser (und davon abgeleitete Zeiger) für den Zugriff auf das Objekt verwendet wird. Dies ermöglicht aggressive Optimierungen, wie das einmalige Laden von Werten in Register, anstatt sie aufgrund potenzieller Seiteneffekte erneut aus dem Speicher zu lesen.

snippet.c
c
1
2
3
4
5
6
void vector_add(int * restrict a, int * restrict b, const int * restrict src, int n) {
for (int i = 0; i < n; i++) {
a[i] += src[i];
b[i] += src[i];
}
}
Erklärung
1
int * restrict a
Teilt dem Compiler mit, dass 'a' der einzige Zugriffspfad auf seinen Speicherblock ist.
2
b[i] += src[i];
Der Compiler weiß, dass 'src' nicht durch den vorherigen Schreibzugriff auf 'a' geändert wurde.