Debug构建和Release构建式的区别

本文主要讨论Windows平台Visual Studio 2017开发环境下Debug构建和Release构建的区别。其他开发环境可能会有所区别。

Debug构建

使用Debug配置构建的程序主要用于程序的调试。在Debug配置下默认会将所有编译优化关闭,包括:

  • 禁用优化,/Od
  • 关闭内部函数,
  • 关闭全程序优化

预处理器定义:

  • _DEBUG 宏定义

调试信息格式:

  • /ZI,生成的PDB文件支持“编译并继续”的特性。与大部分编译优化不兼容。

Release构建

使用Release配置构建的程序主要用于程序的发布。在Release配置下默认会开启大部分优化,包括:

  • 最大速度优化,/O2
  • 启用内部函数(intrinsic),/Oi。使用内部函数生成的代码速度会更快,但是代码可能会更大。如果一个函数是内部函数,在编译时会像内联函数一样插入到代码中。这样可以避免函数调用的开销。
  • 开启全程序优化,/GL。通过将代码生成延迟到链接时间来启动跨模块优化,需要和链接器选型“链接时间代码生成一起使用”。

如果使用Release模式去调试程序,就会发现程序的执行顺序与代码的顺序可能不一致(前后跳来跳去)。原因正是来自于编译优化导致程序的执行顺序可能与原始代码不同。

预处理器定义:

  • NDEBUG 宏定义

调试信息格式:

  • /Zi,会生成一个独立的PDB文件,包含所有用于调试的符号信息。这种分离使得生成的exe或DLL中不会包含调试信息,大小会更小。该选项不会影响编译优化。相反的/Z7会将PDB内嵌到生成的可执行文件或者动态链接库中。

2021年11月27日更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superbin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值