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

标签 c optimization compilation

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

但所有这些都在解释相同的词,例如优化,但没有更深入的内容。

我想通过一个特定的例子来了解响应,以便更好地理解。 下面是一个简单的虚拟代码供引用。谁能告诉我引用此示例, Release模式下与 Debug模式下预期的符号缺失和优化?

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

    #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()*/

最佳答案

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

虽然在发布版本中不会发出符号调试信息,并且会优化代码执行,并且由于符号信息没有放入发布版本中,所以最终可执行文件的大小小于调试可执行文件的大小。

此外,优化并不是发布版本中发生的唯一事情。 引用:this

<小时/>

在使用 GCC-6.2 的示例编译器上,您可以使用 -Ox 标志查看生成的程序集中的差异

  • 在发布版本中,我们通常需要优化,因此请参阅 -O3

  • 在调试构建中,通常我们需要没有优化的调试符号,但具有完整的调试信息,因此请参阅 -g3 -O0

关于c - 调试和发布可执行文件之间的差异(在示例代码中)在优化的符号和函数方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40217816/

相关文章:

mysql - 将大表拆分为单独的表,并在需要时进行 MySql Union 选择

python-3.x - 使用 --enable-shared 安装 Python 3 的问题

java - 带有 JDK10 SDK 的 IntelliJ 不编译带有 1.8 目标的 Maven 项目

c - 内存消耗?

c - 堆栈、数据和指令段在哪里实现?

SQL性能问题

compilation - 构建依赖和运行时依赖有什么区别

kmalloc() 可以返回无效内存吗?

c - 为什么 open() 创建的文件权限与 touch 不同?

algorithm - 具有大量局部最小值的多参数优化