Ich versuche herauszufinden, welche Form der Alias-Analyse in Visual C ++ verwendet wird. Es ist auch bekannt als Pointer-Analyse, Mod-Ref-Analyse, Punkt-zu-Analyse oder Nebeneffekt-Analyse, und ist ziemlich nah an Flucht-Analyse oder Form-Analyse (wenn Sie gesehen haben, dass diese Begriffe verbreitet).
Wenn jemand weiß, wo MSDN solche Dinge diskutiert, kann ich wahrscheinlich von dort aus meinen Weg finden. (Ich habe versucht, zu suchen, aber MSDN scheint undurchdringlich zu sein, wenn Sie nicht viel Zeit dort verbringen.)
Gehen Sie rein nach MSDN-Dokumentation:
"Kein Aliasing annehmen" ( / Oa ) und zugehörige Optionen wurden in Visual Studio 2008 entfernt
__ declspec ( einschränken ) und __declspec ( noalias ) wurden hinzugefügt (2003 oder früher, siehe auch Optimierungs-Best Practices )
Aus diesem I würde geschlossen werden, dass der Compiler / Optimierer standardmäßig Aliasing unter den C ++ - Regeln annimmt (grob gesagt, Zeiger desselben Typs können auf denselben Speicher verweisen). Dies scheint ein vernünftiger Schritt zur Vermeidung von Fehlern aufgrund einer globalen übermäßig aggressiven Option zu sein.
Ich würde weiterhin annehmen, dass die Generierung des Link-Time-Codes den Bereich vergrößert, in dem Non-Aliasing erkannt werden kann.
Die beste Nicht-MSDN-Referenz, die ich finden konnte, ist diese: VC ++ Teamblog . Dies weist jedoch nur darauf hin, dass der Compiler bei der Alias-Analyse einige Zeit benötigt . Vielleicht der Channel9 Video verlinkt gibt einige Einblicke.
(Einige Leute hatten Glück, dass sie in den VC ++ - Kommentaren nach mehr Informationen gefragt haben. Tipp Hinweis ...)
[ bearbeiten ] Ich weiß nicht, ob Phoenix in VS2010 gelandet ist, das Video spricht über Aliasing von 6:00, aber nichts Spektakuläres.
Tags und Links optimization visual-c++ compiler-construction static-analysis aliasing