调试和发布可执行文件之间的差异,在示例代码中,在优化的符号和函数方面

时间:2016-10-24 11:58:25

标签: c optimization compilation

我遇到了很多关于调试和发布之间差异的问题,例如this one

但所有人都在解释像优化这样的词,但没有更深入。

我想通过一个特定的例子来了解响应,以便更好地理解。 下面是一个简单的虚拟代码供参考。在参考这个例子时,有没有人能告诉我预期的符号缺失和发布模式的优化与调试模式的对比?

即使指向一项优化也会有所帮助

    #include<stdio.h>


    int sum(int arg1, int arg2);

    main()
    {
        int out, in1, in2;
        in1 = 1;
        in2 = 0;
        out = 0;
        while (out < 20)
        { 
            out = sum(in1 , in2);
            printf(" Current value of out [%d] = in1 [%d] + in2 [%d]\n", out, in1, in2 );
            in1++;
            in2++;
        } /*End of while*/
    } /*End of main()*/


    int sum(int arg1, int arg2)
    {
        int sum_val;
        sum_val = arg1 + arg2;
        return sum_val;
    } /*End of sum()*/

1 个答案:

答案 0 :(得分:1)

调试版本包括完整的符号调试信息,以帮助调试应用程序,同时不考虑代码优化。

在发布版本中,不会发出符号调试信息,并且优化了代码执行,并且由于符号信息未放入发布版本中,因此最终可执行文件的大小小于调试可执行文件。

优化也不是发布版本中唯一发生的事情。 请参阅:this

在使用GCC-6.2的示例编译器上,您可以使用-Ox标志

查看生成的程序集中的差异
  • 在发布版本中,我们通常需要进行优化,因此请参阅-O3

  • 在调试版本中,我们希望调试符号没有优化,并且需要完整的调试信息,所以请参阅-g3 -O0