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

21
今天我发现编译的静态库在Release模式下比在Debug模式下要大得多。这让我感到非常惊讶,因为据我所知,大多数情况下正好相反。
在Debug模式下,库的大小略大于3MB(这是一个相当大的项目),但在Release模式下,它增加到了6.5MB。有人能告诉我这是什么原因吗?我使用的是通常的Visual Studio(2008)设置进行静态库项目的构建,在构建配置设置中几乎没有更改任何设置。在Release中,我正在使用 /O2,且“喜好大小或速度”设置为“不确定”。/O2(“最大化速度”)可能会导致最终的 .lib 文件比包含所有调试信息的Debug版本要大得多吗?
编辑:附加信息:
Debug:
- 整个程序优化:否
- 启用函数级联接:否 Release:
- 整个程序优化:启用链接时代码生成
- 启用函数级联接:是

1
在两种配置中,“整个程序优化”和“函数级链接”设置怎么样? - sharptooth
3个回答

33

这个差异是由于链接时代码生成的特定原因。在MSDN上阅读编译器 - 每个程序员都应该了解的编译器优化中的“链接时代码生成”一章节 - 它基本上说,当LTCG打开时,编译器会产生更多的数据,这些数据被打包到静态库中,以便链接器可以在实际链接可执行文件时使用这些额外的数据来生成更好的机器代码。

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

PS: 原始链接(2015年11月9日无法使用)


4
谢谢,这解释了很多! - PeterK

1

优化可能是问题所在,特别是自动生成的inline函数在发布版中会更大但更快。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接