Können Sie eingeschränkte Zeiger verwenden, um in einigen Fällen auf dasselbe Objekt zuzugreifen?

Die meisten Definitionen von einschränken besagen, dass es ein Versprechen des Programmierers an den Compiler ist, dass der Zeiger für die Lebensdauer des Zeigers die einzige Möglichkeit ist, auf das Objekt zuzugreifen. Auf diese Weise kann der Compiler die Ausgabe optimieren, da er weiß, dass nur ein Zeiger auf sie zugreifen kann und sie daher nur ändern kann. Was, wenn ich es richtig verstehe, normalerweise bedeutet, dass das Programm den Wert, auf den der Zeiger zeigt, nicht neu laden muss.

Wenn dies korrekt ist, sollte es einige Ausnahmen geben, in denen das Schlüsselwort "restricted" verwendet werden kann, auch wenn dies gegen die Absicht der Verwendung verstößt.

Eine Sache, die mir einfällt, ist, wenn sich die Daten, auf die der Zeiger zeigt, während der Lebensdauer des Zeigers nie wirklich ändern. In diesem Fall müssen die Daten nicht erneut geladen werden, auch wenn die Zeiger auf dieselbe Position zeigen, da sie sich während der Lebensdauer der Zeiger nicht ändern. Z.B.:

int max(int *restrict a, int *restrict b) {
  return((*a > *b) ? *a : *b);
}

int main(void) {
  int num = 3;
  int max = max(&num, &num);
}

Handelt es sich um eine gültige Verwendung der Einschränkung, obwohl dies gegen die beabsichtigte Verwendung verstößt? Wird die Verwendung des Restrict-Schlüsselworts wie dieses undefiniertes Verhalten zur Folge haben?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage