Ich verschiebe meine C++ - Codebasis von Visual Studio 2k3 nach Visual Studio 2k8. Code enthältWie portiere ich Code, der #pragma enthält, optimieren ("a") von VC++ 7 zu VC++ 9?
#pragma optimize("a", on)
MSDN says, dass es bedeutet "kein Aliasing übernehmen". Spätere Versionen von VS weigern sich, dies zu kompilieren und MSDN scheint nicht zu sagen, was mit Code zu tun ist, der dieses #pragma enthält.
Was bedeutet "kein Aliasing annehmen" und wie kann ich eine Entscheidung treffen, was ich mit dieser Codezeile machen soll?
Ich verstehe wirklich nicht, wie die oben genannten Sachen verhindern, dass der Compiler schneller Code erzeugt. – sharptooth
Es geht darum, welche Werte der Compiler in Registern cachen kann - ein bisschen wie das volatile Problem. –
@sharptooth: Der Compiler weiß nicht immer über das Aliasing - z.B. wenn a, p1 und p2 in eine Funktion übergeben werden. Ohne "kein Aliasing annehmen" würde eine Modifikation durch p1 alle zwischengespeicherten Daten über a und p2 ungültig machen, was Speicherlesevorgänge statt Registerleseoperationen erfordern würde. – peterchen