20

今天我发现我正在处理的编译静态库在Release模式下比在Debug下大得多。我发现这非常令人惊讶,因为大多数时候情况正好相反(据我所知)。

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

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

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

4

3 回答 3

33

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

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

PS: 原始链接(2015 年 11 月 9 日无效)

于 2010-06-24T06:08:58.217 回答
1

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

于 2010-06-23T12:28:44.513 回答
0

就我个人而言,我从未见过发布 PDB 比调试 PDB 大。LIB 的交易相同。

于 2010-06-23T12:21:29.030 回答