2010-06-23 81 views
19

今天我發現編譯的靜態庫我正在處理的是版本更大模式比調試。我發現這很令人驚訝,因爲大部分時間恰好相反(據我所知)。發佈模式靜態庫比調試模式版本大很多

調試模式下的大小略高於3 MB(它是一個相當大的項目),但是在發行版中它增加到了6.5 MB。有人能告訴我可能是什麼原因嗎?我爲靜態庫項目使用通常的Visual Studio(2008)設置,在構建配置設置中幾乎沒有改變。在發行版中,我使用的是/ O2,而「Favour size or speed」設置爲「Both both」。/O2(「最大化速度」)是否會導致最終的.lib比調試版中的所有調試信息都大得多?

編輯: 附加信息:
調試:
- 整個程序優化:沒有
- 啓用功能級鏈接:沒有

發佈:
- 整個程序優化:啓用鏈接時代碼生成
- 啓用功能級別鏈接:是

+1

什麼是「整個程序優化」和「函數級鏈接」,在這兩種配置的設置? – sharptooth 2010-06-23 12:22:46

+0

更新了信息。 – PeterK 2010-06-23 12:32:27

回答

28

區別在於鏈接時代碼的生成。閱讀MSDN上Compilers - What Every Programmer Should Know About Compiler Optimizations中的鏈接時代碼生成一章 - 基本上說,在LTCG打開的情況下,編譯器會生成更多的數據,這些數據打包到靜態庫中,以便鏈接器可以使用該額外數據來生成更好的機器代碼鏈接可執行文件。

由於您在Debug配置中關閉了LTCG,因此生成的庫明顯更小,因爲它沒有額外的數據。

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

+3

謝謝,這解釋了很多! – PeterK 2010-06-24 06:58:37

0

個人我從來沒有見過一個relea se PDB大於調試PDB。 LIB同樣如此。

1

優化可能是這裏的問題,值得注意的是自動創建inline功能將會比調試更大但更快。

相關問題