【问题标题】:Visual C++ - enable optimizations and browse the optimized codeVisual C++ - 启用优化并浏览优化的代码
【发布时间】:2012-08-01 22:22:40
【问题描述】:

如何在启用优化的情况下编译我的项目并查看我的代码中发生了哪些优化变化。

例如:

我的原始代码:

printf("Test: %d",52);
for (int empty=0;i<100000;i++) {
    //Nothing here
}

现在当我用优化编译我的代码时,我想看看:(我想会是这样)

printf("Test: 52");

【问题讨论】:

    标签: c++ compiler-optimization


    【解决方案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
        }
    

    【讨论】:

    • stackoverflow.com/questions/2391442/… GCC 允许您查看优化后的代码。我想要一些适用于 VC++ 的东西。
    • GCC 在创建 AST 时进行优化。我不知道 MSVC 是怎么做到的。
    • @MessyCode:VC++ 没有这样的选项。它要么是原始来源,要么是最终组装。很多优化不能反映在 C 代码中,所以你无论如何也看不到它们。
    • @MessyCode 我想要一些东西...... 在互联网上要求高的东西不会让你得到地方。
    • @MessyCode 什么类型的文件?它是cpp 文件吗?如果不是,源代码不会改变 - 这正是我在答案中所说的。我怀疑它确实如此。 MSVS 也有该选项 - 您将获得优化或未优化的 .dll.exe 文件,您可以使用 show dissasembly 选项查看代码。
    猜你喜欢
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多