restrict (Keyword C)
Verfasst: 07.02.2024, 21:39
Abend zusammen
Bislang dachte ich eigentlich, ich hätte die Funktion des Keywords restrict soweit verstanden, doch nun beschleichen mich einige Zweifel, ob meine Vorstellungen so tatsächlich den Realitäten entsprechen.
Wovon ich bislang ausging
Gegeben seien folgende zwei Beispiele
In diesem Beispiel kann der Wert von *a nicht zwischengespeichert werden, da der Pointer a und der Pointer b möglicherweise auf den selben Speicherbereich zeigen (pointer aliasing: *b = 7 könnte den Wert von *a verändern). Somit muss Pointer a bei der Anweisung *a tatsächlich jedes mal dereferenziert werden - was durch den Sprung zur entsprechenden Adresse mehr Zeit kosten würde, als den Wert zwischenzuspeichern (Optimierung des Maschinencodes).
Da wir nun dem Compiler aber mittels dem Keyword restrict versichern, dass der Speicherbereich auf den Pointer a verweist unabhängig ist vom Speicherbereich, auf den Pointer b zeigt, kann der Compiler Optimierungen vornehmen, die er ohne restrict nicht konnte. Denn die Anweisung *b = 7; hat am Wert *a mit Sicherheit nichts verändert.
Stimmt das denn so?
Etwas verunsichert hat mich diesbezüglich "Handmade Hero Day 005" (Casey Muratori) https://youtu.be/w7ay7QXmo_o?si=sRBu0qP7JdY7jz0Z&t=6627.
Zwar geht er mit einem sehr ähnlichen Beispiel auf die Problematik von "pointer aliasing" ein, doch er erwähnt restrict nur beiläufig gegen Ende - und nicht als Lösung des Problems - wovon ich eigentlich dachte, dass es das sei!
Bislang dachte ich eigentlich, ich hätte die Funktion des Keywords restrict soweit verstanden, doch nun beschleichen mich einige Zweifel, ob meine Vorstellungen so tatsächlich den Realitäten entsprechen.
Wovon ich bislang ausging
Gegeben seien folgende zwei Beispiele
Code: Alles auswählen
void foo(int *a, int *b)
{
int x, y;
x = *a;
*b = 7;
y = *a;
return;
}
Code: Alles auswählen
void foo(int * restrict a, int *b)
{
int x, y;
x = *a;
*b = 7;
y = *a;
return;
}
Stimmt das denn so?
Etwas verunsichert hat mich diesbezüglich "Handmade Hero Day 005" (Casey Muratori) https://youtu.be/w7ay7QXmo_o?si=sRBu0qP7JdY7jz0Z&t=6627.
Zwar geht er mit einem sehr ähnlichen Beispiel auf die Problematik von "pointer aliasing" ein, doch er erwähnt restrict nur beiläufig gegen Ende - und nicht als Lösung des Problems - wovon ich eigentlich dachte, dass es das sei!