2012-12-06 99 views
4

我有一個項目(VC2005),它需要一個不合理的時間(超過40分鐘)鏈接在發佈,而它在調試中少於5秒鏈接。緩慢鏈接釋放優化禁用

兩個版本都禁用增量鏈接,並且所有文件都位於同一個驅動器上。 在Release中禁用鏈接器優化不會有幫助。

任務管理器永遠不會顯示鏈接器使用的超過150,000 K的內存,這對於具有3GB內存的計算機來說不算什麼。

我正在建造更大的項目,從未注意到建築時間的差異。

任何想法,爲什麼會發生這種情況?

+0

另外我有雙核心cpu和任務管理器顯示所有時間都使用了50%的cpu,所以所有的時間都花在鏈接器上。 –

+0

我不知道msvc,但GNU LD需要大量額外的內存和時間去除死代碼。如果來自兩個版本(發行版和調試版)的二進制文件的大小大不相同,請嘗試查看是否可以找到某些選項來禁用嘗試消除未使用的代碼。 –

+0

也許/ LTCG(鏈接時間代碼生成)啓用?但是我懷疑這會使5秒與40分鐘之間的差異變大。項目中兩種配置之間必須有本質區別。 – pag3faul7

回答

-1

如前所述,最可能的原因是/ LTCG(整個程序優化)。

其他因素可能是使用/ Gy編譯的單個文件(您應該在輸出中看到一些警告)或/ OPT:REF,/ OPT:ICF(檢查項目屬性/鏈接器/優化)你在不知不覺中正在運行PGO儀器的某個階段。