发布模式静态库比调试模式版本大得多

时间:2010-06-23 12:19:48

标签: c++ static-libraries release-mode debug-mode

今天我发现我正在处理的编译静态库在发布模式下比在调试中要大得多。我发现它非常令人惊讶,因为大部分时间恰好相反(据我所知)。

调试模式下的大小略大于3 MB(这是一个相当大的项目),但在发布时它最多可达到6.5 MB。有人能告诉我这可能是什么原因吗?我正在使用静态库项目的常规Visual Studio(2008)设置,在构建配置设置中几乎没有更改。在发布时,我正在使用/ O2并且“赞成大小或速度”被设置为“不会”。 / O2(“最大化速度”)是否会导致最终的.lib比包含所有调试信息的调试版本大得多?

修改 附加信息:
调试:
- 整个计划优化:没有 - 启用功能级别链接:否

推出:
- 整个程序优化:启用链接时代码生成
- 启用功能级别链接:是

3 个答案:

答案 0 :(得分:30)

区别在于链接时代码生成。阅读MSDN上Compilers - What Every Programmer Should Know About Compiler Optimizations中的链接时代码生成一章 - 它基本上说,在LTCG打开的情况下,编译器会生成更多数据,这些数据被打包到静态库中,以便链接器可以使用额外的数据来生成更好的数据实际链接可执行文件时的机器代码。

由于您在调试配置中关闭LTCG,因此生成的库明显更小,因为它没有额外的数据。

PS: Original Link (not working at 11/09/2015)

答案 1 :(得分:1)

优化可能是这里的问题,特别是自动创建的inline函数将更大但发布速度比调试更快。

答案 2 :(得分:0)

就我个人而言,我从未见过发布PDB比调试PDB更大。 LIB也是如此。