在一些静态库中打开整个程序优化会大大增加库的大小!

时间:2010-12-31 08:20:00

标签: c++ visual-studio-2010 optimization protocol-buffers

在Visual Studio 2010中,我有一个C / C ++静态库项目。当我在发布模式下启用选项整个程序优化时,我获得了超过90 MB的.lib文件! 当我关闭此选项时,大小减少到24 MB。 该库包含数百个使用proto-buffer生成的类。

我想知道为什么这个选项会增加尺寸? 我们必须在哪些条件下关闭它?

编辑:感谢chrisaycock

将MO更改为MB

3 个答案:

答案 0 :(得分:17)

整个程序优化意味着在链接阶段之前不会对事物进行优化。

静态库的大小不是要看的东西。在此模式下,静态库可能充满了最终优化/链接阶段所需的额外信息。如果您没有进行整个程序优化,那么在构建静态库之后可能会抛弃该信息,但是当您需要将信息保留到最后时。

请查看最终可执行文件的大小。 (它可能仍会增加,但它不应该增加如此巨大的数量。)

答案 1 :(得分:8)

  

我想知道为什么这个选项   增加尺寸?

因为您正在构建静态库,而不是可执行文件。 整个程序优化会留下大量优化,直到链接时间(而不是编译时)。因此,您的库包含未经优化的“中间表示”而不是汇编代码。

  

我们必须在哪些条件下转向它   关闭?

对于静态库,正如您刚刚发现的那样。

答案 2 :(得分:4)

启用整个程序优化允许链接器内联在实现(* .cpp)文件中定义的函数。在许多地方内联相同的函数可以显着增加二进制文件大小。