2010-06-23 30 views
19

今天我发现编译的静态库我正在处理的是版本更大模式比调试。我发现这很令人惊讶,因为大部分时间恰好相反(据我所知)。发布模式静态库比调试模式版本大很多

调试模式下的大小略高于3 MB(它是一个相当大的项目),但是在发行版中它增加到了6.5 MB。有人能告诉我可能是什么原因吗?我为静态库项目使用通常的Visual Studio(2008)设置,在构建配置设置中几乎没有改变。在发行版中,我使用的是/ O2,而“Favour size or speed”设置为“Both both”。/O2(“最大化速度”)是否会导致最终的.lib比调试版中的所有调试信息都大得多?

编辑: 附加信息:
调试:
- 整个程序优化:没有
- 启用功能级链接:没有

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

+1

什么是“整个程序优化”和“函数级链接”,在这两种配置的设置? – sharptooth 2010-06-23 12:22:46

+0

更新了信息。 – PeterK 2010-06-23 12:32:27

回答

28

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

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

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

+3

谢谢,这解释了很多! – PeterK 2010-06-24 06:58:37

0

个人我从来没有见过一个relea se PDB大于调试PDB。 LIB同样如此。

1

优化可能是这里的问题,值得注意的是自动创建inline功能将会比调试更大但更快。

相关问题