Visual C++ - 启用优化并浏览优化的代码
Posted
技术标签:
【中文标题】Visual C++ - 启用优化并浏览优化的代码【英文标题】:Visual C++ - enable optimizations and browse the optimized code 【发布时间】:2012-08-01 22:22:40 【问题描述】:如何在启用优化的情况下编译我的项目并查看我的代码中发生了哪些优化变化。
例如:
我的原始代码:
printf("Test: %d",52);
for (int empty=0;i<100000;i++)
//Nothing here
现在当我用优化编译我的代码时,我想看看:(我想会是这样)
printf("Test: 52");
【问题讨论】:
【参考方案1】:编译器不会优化修改源代码(您在问题中显示的内容),而是修改由 asm 指令组成的二进制文件。
如何打开和关闭优化取决于编译器,因此您必须参考其文档。
在 MSVS 中,您可以从顶部工具栏中选择此选项 - 查找 Debug
(未优化)与 Release
(已优化)。可以通过调试器单步执行代码来查看二进制代码,右键单击-> show dissasembly。
例如,您的代码会生成:
没有优化:
printf("Test: %d",52);
0097171E mov esi,esp
00971720 push 34h
00971722 push offset string "Test: %d" (9788C8h)
00971727 call dword ptr [__imp__printf (97C3E0h)]
0097172D add esp,8
00971730 cmp esi,esp
00971732 call @ILT+575(__RTC_CheckEsp) (971244h)
for (int i=0;i<100000;i++)
00971737 mov dword ptr [i],0
0097173E jmp wmain+49h (971749h)
00971740 mov eax,dword ptr [i]
00971743 add eax,1
00971746 mov dword ptr [i],eax
00971749 cmp dword ptr [i],186A0h
00971750 jge wmain+54h (971754h)
//Nothing here
00971752 jmp wmain+40h (971740h)
经过优化:
printf("Test: %d",52);
013A1000 push 34h
013A1002 push offset string "Test: %d" (13A20F4h)
013A1007 call dword ptr [__imp__printf (13A209Ch)]
013A100D add esp,8
for (int i=0;i<100000;i++)
//Nothing here
【讨论】:
***.com/questions/2391442/… GCC 允许您查看优化后的代码。我想要一些适用于 VC++ 的东西。 GCC 在创建 AST 时进行优化。我不知道 MSVC 是怎么做到的。 @MessyCode:VC++ 没有这样的选项。它要么是原始来源,要么是最终组装。很多优化不能反映在 C 代码中,所以你无论如何也看不到它们。 @MessyCode 我想要一些东西...... 在互联网上要求高的东西不会让你得到地方。 @MessyCode 什么类型的文件?它是cpp
文件吗?如果不是,源代码不会改变 - 这正是我在答案中所说的。我怀疑它确实如此。 MSVS 也有该选项 - 您将获得优化或未优化的 .dll
或 .exe
文件,您可以使用 show dissasembly
选项查看代码。以上是关于Visual C++ - 启用优化并浏览优化的代码的主要内容,如果未能解决你的问题,请参考以下文章