Microsoft\'s C++ compiler (cl.exe
, as included with Visual Studio) offers several optimization switches. The difference between most of them seems self-explanat
Asha's answer cites a blog post about Visual Studio 2005, and is rather out of date.
The latest version of the documentation is available here:
/Ox
: https://msdn.microsoft.com/en-us/library/59a3b321.aspx/O2
: https://msdn.microsoft.com/en-us/library/8f8h5cxt.aspxAccording to those:
/Ox
→ /Og /Oi /Ot /Oy /Ob2
/O2
→ the same, but further adds /Gs /GF /Gy
/GF
eliminates duplicate strings/Gy
does function level linkingYou may additionally be interested in /GS-
which turns off security checks around the stack, which can be a significant performance hit (see the MS docs for /GS).
You should benchmark your specific application, as ever.
I found it here:
Ox and O2 are almost identical. They differ only in the fact that O2 also throws GF and Gy. There is almost no reason to avoid throwing these two switches.