capypad
0 Tage Serie
c / intermediate
Snippet

Optimierung mit dem restrict-Schlüsselwort

Der 'restrict'-Qualifier ist ein Hinweis an den Compiler, dass während der Lebensdauer des Pointers nur der Pointer selbst oder ein davon abgeleiteter Wert verwendet wird, um auf das Objekt zuzugreifen. Dies ermöglicht dem Compiler Optimierungen wie die Vektorisierung, die ansonsten aufgrund von möglichem Pointer-Aliasing unsicher wären.

snippet.c
c
1
2
3
4
5
void add_arrays(int *restrict a, int *restrict b, int *restrict result, int n) {
for (int i = 0; i < n; i++) {
result[i] = a[i] + b[i];
}
}
Erklärung
1
int *restrict a
Teilt dem Compiler mit, dass 'a' auf einen eindeutigen Speicherblock zeigt, der nicht von 'b' oder 'result' überlagert wird.
2
result[i] = a[i] + b[i];
Der Compiler kann Werte aus 'a' und 'b' sicher in Register laden, ohne zu befürchten, dass 'result' sie überschreibt.