2014-09-03 76 views
3

我有點遲到這個問題,但遲到比從來沒有更好。自推出以來,我一直使用Visual Studio 6.0,但最近在新PC上切換到VS 2013。Visual Studio 2013創建更大的EXE的 - 沒有MFC

我已經讓自己的項目在2013年建成,但生成的可執行文件始終比生成的VS6.0大。我在這裏看到過類似的線索,關於從VS2008到VS2010的轉換過程中出現的情況,以及這裏的意見和建議似乎都將變化歸因於靜態鏈接的MFC庫中的更改。但是,我的項目是直接C代碼。沒有C++,更不用說MFC了。並且我的項目中「使用MFC」選項設置爲「使用標準Windows庫」(大概由生成2013兼容項目的導入工具設置)。唯一使用的非stadard庫是wsock32.lib。

額外的大小不是一個殺手,但它是一個重要的相對於整個應用程序的大小。我最大的.exe文件從980Kb增加到了1.3Mb--大小增加了35%,以小尺寸爲賣點的應用程序(即安裝這個小應用程序,您可以訪問我們所有的好東西)。這沒有調試信息 - 調試版本的增加更多 - 但我並不真正關心這一點。

任何想法如何去除新的殘留 - 甚至知道它是什麼?

+0

從歷史上看,將一次調用鏈接到「printf」用於引入大量靜態lib代碼。我並不是說你的問題是printf,但它可能是一些lib調用,由於某些新功能,現在很重(例如,自VS6以來,有多少功能已添加到WinSock中?)另一種可能性是添加到編譯器的安全性功能code-gen自VS6以來。 – franji1 2014-09-04 04:35:36

+0

即使您不願意在單獨安裝的C++運行時DLL上添加依賴項,也可以使用'/ MD'進行生成,因爲這樣可以很好地說明應用程序與庫的大小有多大關係。 – 2014-09-06 01:41:22

+0

您正在追趕16年的處理器開發和C++代碼優化器的改進。更大的代碼*可以更快的代碼,內聯和循環展開優化由於更大的CPU高速緩存,自動矢量化和自動並行化,不可避免地使用更復雜的指令。字節的價格便宜了100倍,在1.3倍的尺寸上增加了無用的煩惱。 – 2014-09-06 11:36:25

回答

1

通常,您在兩個系統上生成一個MAP文件,並找出造成最大貢獻的部分。

安東的回答讓我想起:首先檢查他們是否都連接相同的方式(靜態或動態兩種,否則它是蘋果和桔子)

1

這是a good manual如何使您的二進制文件更小。

基本思路如下:

  1. 不要忘記釋放模式
  2. 聲明#define WIN32_LEAN_AND_MEAN
  3. 動態鏈接到C++運行時
  4. 編譯可執行文件沒有調試信息
  5. 編譯與/ O1,'優化大小'標誌
  6. 刪除iostream和fstream標頭,我們e如果可能的話,改爲低級別
+0

#6也給你一個巨大的速度提升作爲獎勵。 – 2014-09-06 01:38:47