2016-04-26 4 views
0

Ich weiß, dass wenn Sie Inline-Assembler mit GCC verwenden, können Sie die Assembly-Abschnitte mit dem Schlüsselwort volatile dekorieren, damit der Optimierer keine Dinge bewegt.Benötigt Inline Assembly in MS C++ etwas wie volatile, um Optimierer zu vermeiden

Gibt es eine ähnliche Sache in Microsoft C++, oder lässt der Optimierer standardmäßig Inline-Code allein?

+0

Ich kann keine Dokumentation darüber finden, was MS C++ bei der Optimierung von Inline Assembler tun wird. Das Fehlen von "Interface" -Deklarationen (wie GCC-Constraints) und die vage Aussage, dass Registerinhalte vor dem Eingeben eines Inline-Asm-Blocks gespeichert werden, zeigen jedoch, dass MS Inline Asm völlig undurchsichtig ist und daher nicht wegoptimiert wird. – JimmyB

Antwort

2

Es gibt keine solche Option, aber der Optimierer versucht nicht, die Inline-Assembly zu optimieren.

Wenn überhaupt, wird es weniger Optimierungen auf den umgebenden Code verwenden, da es nicht die genauen Auswirkungen der Baugruppe analysiert.

+0

Es wird nicht * innerhalb * des Assembler-Codes optimieren, aber die Frage ist, ob es den Code optimieren wird, wie GCC tut, wenn es keinen sichtbaren Effekt von asm * und * sieht, dass asm nicht 'flüchtig' ist. – JimmyB

+0

@JimmyB - Nein, so etwas wird es nicht tun. –