In C: Was genau sind die Leistungsvorteile, die mit der Einhaltung des strengen Aliasing einhergehen?
In C: Was genau sind die Leistungsvorteile, die mit der Einhaltung des strengen Aliasing einhergehen?
Es gibt eine Seite, die Aliasing sehr gründlich beschreibt Hier.
Es gibt auch einige SO-Themen Hier und Hier.
Zusammenfassend kann der Compiler den Wert von Daten nicht annehmen, wenn zwei Zeiger unterschiedlicher Typen auf denselben Ort zugreifen (d. H. Er muss den Wert jedes Mal lesen und kann daher keine Optimierungen vornehmen).
Dies tritt nur auf, wenn strenges Aliasing nicht erzwungen wird. Strenge Aliasing-Optionen:
Kopieren Sie diesen Code in main.c:
void f(unsigned u)
{
unsigned short* const bad = (unsigned short*)&u;
}
int main(void)
{
f(5);
return 0;
}
Dann kompiliere den Code mit diesen Optionen:
gcc main.c -Wall -O2
Und du wirst bekommen:
main.c: 3: Warnung: Dereferenzierung type-punned Der Zeiger bricht das strikte Aliasing Regeln
Deaktivieren Sie das Aliasing mit:
gcc main.c -fno-strict-aliasing -Wall -O2
Und die Warnung verschwindet. (Oder nehmen Sie einfach -Wall aber ... kompilieren Sie nicht ohne es)
Versuchen Sie, wie ich könnte MSVC nicht bekommen, um mich zu warnen.