8

Ich versuche herauszufinden, welche Form von 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).Welche Form der Alias-Analyse verwendet Visual C++?

Wenn jemand weiß, wo MSDN solche Dinge diskutiert, kann ich wahrscheinlich meinen Weg von dort finden. (Ich habe versucht, die Suche, aber MSDN scheint undurchdringlich zu sein, wenn man dort viel Zeit verbringen nicht.)

+3

MSDN ist hart. Es ist besser, Google mit der Website msdn.com zu verwenden, als die MSDN-Suche selbst zu verwenden. –

+0

Ich würde annehmen, dass sie so viele Waffen wie möglich mitbringen würden, da Aliasresultate viele Optimierungen unmöglich machen. Ich würde also nicht erwarten, dass die Antwort einfach ist. Selbst wenn sie eine "Punkt-zu-Punkt" -Analyse verwenden, gibt es eine Vielzahl von Variationen: Flusssensitiv/Insensitiv, Kontextsensitiv oder nicht, Quellempfindlich oder nicht, Intra-, Interprozedur-, Kreuzkompilierungseinheiten, ... Was ist dahinter? die Frage? –

+1

@Ira Baxter: Genau das versuche ich herauszufinden. Ist es Fluss-, Kontext-, Feld-, Objekt-, etc. empfindlich? Was ist dahinter: Ich mache meine Literaturrecherche für meine Doktorarbeit, und mir wurde klar, dass ich die Antwort (oder wie ich die Antwort finde) für gcc, LLVM und einige andere Compiler kenne, aber ich konnte sie nicht für Visual C++ finden . –

Antwort

2

rein MSDN-Dokumentation Going:

„No Aliasing Angenommen“ (/Oa) und damit verbundene Optionen wurde in Visual Studio 2008 entfernt.

__declspec (restrict) und __declspec (noalias) hinzugefügt wurde (2003 oder früher, siehe auch Optimization best practices)

Von diesen mir würden den Schluss, dass der Compiler/Optimierer durch Standard Aliasing unter den C++ Regeln übernimmt (Grob können Zeiger desselben Typs 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 davon ausgehen, dass die Link-Time-Code-Generierung den Bereich vergrößert, in dem Non-Aliasing erkannt werden kann.


Die beste Nicht-MSDN Referenz ich finden konnte, ist dies: VC++ team blog. Dies zeigt jedoch nur, dass der Compiler einige Zeit auf Alias-Analyse verwendet. Vielleicht gibt das Channel9 Video-Link einen Einblick.

(Einige Leute hatten Glück mit in den Kommentaren VC++ für weitere Informationen zu fragen. Hint hint ...)


[bearbeiten] Ich weiß nicht, ob Phoenix in VS2010 endete, die Video spricht über Aliasing 6:00, aber nichts spektakuläres.

Verwandte Themen