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
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.