簡體   English   中英

發布模式靜態庫比調試模式版本大得多

[英]Release mode static library much larger than debug mode version

今天我發現我正在處理的編譯靜態庫在Release模式下比在Debug中大得多。 我發現它非常令人驚訝,因為大部分時間恰好相反(據我所知)。

調試模式下的大小略大於3 MB(這是一個相當大的項目),但在發布時它最多可達到6.5 MB。 有人能告訴我這可能是什么原因嗎? 我正在使用靜態庫項目的常規Visual Studio(2008)設置,在構建配置設置中幾乎沒有更改。 在發布時,我正在使用/ O2並且“贊成大小或速度”被設置為“不會”。 / O2(“最大化速度”)是否會導致最終的.lib比調試版本大得多,其中包含所有調試信息?

編輯:附加信息:
調試:
- 整個計划優化:沒有
- 啟用功能級別鏈接:否

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

區別在於鏈接時代碼生成。 閱讀編譯器中的鏈接時代碼生成一章- 每個程序員應該知道的關於 MSDN上編譯器優化的內容 - 它基本上說,當LTCG打開時,編譯器會生成更多的數據,這些數據被打包到靜態庫中,以便鏈接器可以使用它用於在實際鏈接可執行文件時生成更好的機器代碼的額外數據。

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

PS: 原始鏈接(不在2015年9月11日工作)

優化可能是這里的問題,特別是自動創建的inline函數將比調試更大但發布更快。

就個人而言,我從未見過發布PDB比調試PDB更大。 LIB的相同交易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM