c / intermediate
Snippet
Der restrict-Zeiger-Qualifizierer
Das Schlüsselwort 'restrict' ist ein Hinweis an den Compiler, dass der Zeiger der einzige Weg ist, auf die zugrunde liegenden Daten zuzugreifen. Dies verhindert Aliasing und ermöglicht aggressive Optimierungen wie Vektorisierung.
snippet.c
1
2
3
4
5
void vector_add(int * restrict a, int * restrict b, int * restrict res, int n) {for (int i = 0; i < n; i++) {res[i] = a[i] + b[i];}}
Erklärung
1
int * restrict a
Informiert den Compiler, dass 'a' sich nicht mit 'b' oder 'res' überschneidet.
2
res[i] = a[i] + b[i];
Da kein Aliasing auftritt, kann der Compiler diese Operationen sicher umordnen oder vektorisieren.