0 Tage Serie
c / intermediate
Snippet

Optimierung mit dem restrict-Qualifier

Das Schlüsselwort 'restrict' ist ein Hinweis an den Compiler, dass der Pointer innerhalb dieses Scopes die einzige Möglichkeit ist, auf das referenzierte Objekt zuzugreifen. Dies eliminiert potenzielles 'Pointer-Aliasing', wodurch der Compiler aggressive Optimierungen wie die Vektorisierung durchführen kann.

snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
void vector_add(int * restrict a, int * restrict b, int * restrict result, int n) {
for (int i = 0; i < n; i++) {
result[i] = a[i] + b[i];
}
}
int main() {
int arr1[] = {1, 2, 3};
int arr2[] = {4, 5, 6};
int res[3];
vector_add(arr1, arr2, res, 3);
printf("Result: %d %d %d\n", res[0], res[1], res[2]);
return 0;
}
Erklärung
1
int * restrict a
Informiert den Compiler, dass der Pointer 'a' im Speicher nicht mit 'b' oder 'result' überlappt.
2
result[i] = a[i] + b[i];
Dank restrict weiß der Compiler, dass das Schreiben in result[i] keine Werte in a[i] oder b[i] verändert.