2014-10-26 148 views
1

好吧,我在這裏有一個非常意想不到的行爲。使用中等規模的遺留代碼項目時,我注意到編譯速度不合理。預編譯頭文件被使用,但它的實用性值得懷疑。無論如何,這是很好的util我決定建立在發佈模式的項目。編譯持續大約1.5小時,然後鏈接階段:〜2小時與鏈接器使用的總RAM大小爲1.3 GB。查看生成的* .obj文件,你可以說出了什麼問題 - 它們的大小從20MB到50MB不等,儘管實際處理的文件相對較小。 放牧,連接器輸出沒有說太多:緩慢連接階段

Starting pass 1 
Processed /DEFAULTLIB:msvcprt 
Processed /DEFAULTLIB:uuid.lib 
Processed /DEFAULTLIB:OLDNAMES 
*prints nothing for a long time* 
Processed /DEFAULTLIB:ws2_32.lib 
Processed /DEFAULTLIB:mswsock.lib 
*prints nothing for an hour* 
... 

所以,我有幾個問題:

  • 大* .OBJ文件可能會導致這樣的慢聯動?
  • 可以在預編譯中添加更多的頭文件使編譯和鏈接更快嗎?
  • 我還應該嘗試什麼?

任何幫助將不勝感激。

+0

檢查我們的系統上運行的其他進程。殺毒軟件是通常的罪魁禍首。 – 2014-10-26 20:26:44

+0

@CaptainObvlious謝謝,我會檢查,但爲什麼它不是在調試模式下的情況? – vim 2014-10-27 07:08:46

+0

您是否啓用了鏈接時間優化? – 2014-10-29 12:05:23

回答

0

顯然gcc編譯器以不同的方式處理「前綴」頭文件vC++處理預編譯頭文件。就像我想的那樣,爲預編譯添加更多的頭文件將其大小增加到幾乎500MB,但生成的目標文件變得更小,並且編譯/鏈接變得更快(儘管現在鏈接持續時間大約2-3分鐘,這不是最佳但不是不好像之前一樣)。