代码之家  ›  专栏  ›  技术社区  ›  PeterK

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

  •  19
  • PeterK  · 技术社区  · 15 年前

    今天我发现我正在研究的编译静态库在 释放 模式比 调试 . 我发现这非常令人惊讶,因为大多数时候恰恰相反(据我所知)。

    调试模式下的大小略大于3MB(这是一个相当大的项目),但在发行版中,它将达到6.5MB。有人能告诉我为什么会这样吗?我正在为静态库项目使用通常的Visual Studio(2008)设置,在生成配置设置中几乎没有更改任何内容。在发行版中,我使用的是/o2,而“偏好大小或速度”设置为“两者都不是”。/O2(“maximize speed”)会导致final.lib比包含所有调试信息的调试版本大很多吗?

    编辑: 其他信息:
    Debug:
    -整个程序优化:否
    -启用功能级别链接:否

    释放:
    -全程序优化:启用链路时间代码生成
    -启用功能级别链接:是

    3 回复  |  直到 10 年前
        1
  •  30
  •   this.myself alexisdm    10 年前

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

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

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

        2
  •  1
  •   SmacL    15 年前

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

        3
  •  0
  •   Billy ONeal IS4    15 年前

    就我个人而言,我从未见过发布PDB比调试PDB大。伦敦银行同业拆借利率也一样。