In visual studio a object file (.obj) is generating after compiling a c++ file. How to read and understand it? Also how to see the code after compiler optimization in Visual
You're sort of asking the wrong question: you say you want to see compiler optimizations but then you draw conclusions leading you to think you .obj files are required for that. That works, as cynic's answer shows, but there are alternatives which can be handier/better depending on the situation:
Use the DUMPBIN tool from Visual Studio command prompt. Specifically, the /DISASM
option shows you the disassembly. Do note the if you have link-time optimization enabled, then at least theoretically the final code may change after the .obj
files are linked to form the final binary (.exe
or .dll
). You can disassemble those with DUMPBIN
as well.
Dumpbin at the /all setting shows code sections & directories. Detailed explanations of things like code section characteristics is not common knowledge, but may be found in certain books. Here's a precis on COFF, here's a more detailed description, or there's even a WYSINWYX thesis.
Adding to @cynic's answer, in Visual Studio (15 & 17) it's possible to run DumpBin via the menu. Go to Tools/External Tools and click Add. Put in the Title box something like DumpBin Your_Exe or Your_Obj name and find the path for DumpBin if it isn't in the environment settings. It can be similar to the following:
c:\program files (x86)\microsoft visual studio\2017\community\VC\Tools\MSVC\SDK-Version\bin\Host $(Platform)\$(Platform)\dumpbin.exe
and add it to the Command box. For arguments try something like:
/ALL /OUT:C:\Users\New\Desktop\dumpofYour_ExeName.txt "Pathname to your obj/executable file"
and yes, the quotes will work.
If using the desktop, put that in the initial directory box as well. Select "prompt for arguments" if you wish to leave the Argument box blank.