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

Gha*_*uni 9 c++ optimization visual-studio-2010 protocol-buffers

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

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

编辑:感谢chrisaycock将MO更改为MB

Leo*_*son 17

整个程序优化意味着直到链接阶段才对事物进行优化.

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

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


chr*_*ock 8

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

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

我们必须在哪些条件下关掉它?

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

  • 本文讨论了您打算发送给其他人的静态库,这些库可能会使用不同的编译器版本将它们链接到他们的项目.在这种情况下关闭WPO对于兼容性原因是有意义的,但如果libs仅供内部使用,使用相同的编译器版本,那么WPO应该没问题并且可能是有益的.(如果不是,我怀疑该选项是否会存在于静态库中.) (4认同)