VC寫的程序體積是挺大的,網上也有不少優化的文章,都是針對VC6.0來講的。我把個人總結下。 windows
#include <windows.h>
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"user32.lib") 函數
寫Win32程序的話,windows.h 是必須的,使用動態鏈接必要的系統庫,能夠把link下的連接庫所有刪除,須要就練級。 測試
#pragma comment(lib,"msvcrt.lib") 優化
這句是用來動態鏈接VC庫的,使用VC6.0的能夠加上,可是使用VS2008之後的就不要加了。我是用VS2010的時候,編譯後須要 msvcr100.dll 文件。VS2010一旦靜態連接了msvcrt.lib,體積立立刻到28,若是複雜點的程序可能會更大。如個僅僅是一個HelloWorld,一個MessageBox的話,由於不須要用到msvcrt.lib,因此體積不會增長的,這個時候加不加這句話都無所謂。 ip
#pragma comment(linker, "/SUBSYSTEM:windows") io
這句是用來講明是win32程序,不是控制檯的程序,控制檯的程序會有個黑窗口。能夠再程序裏寫,也能夠再配置裏寫。 編譯
#pragma comment(linker, "/ENTRY:main") 配置
這個用來更改入口函數,對vs2010編譯的程序,效果很明顯。一旦指定了入口函數,體積真的是立馬下來了。 程序
#pragma comment (linker, "/ALIGN:512") 方法
對齊方式,這個我用VS2010測試的時候,修改這個,編譯後的程序都提示不是有效的Win32程序。VC6.0上沒問題。VS2010編譯的同志就不要改了。VC6.0的能夠修改測試,數值還能夠減小。
#pragma comment(linker, "/merge:.data=.text")
#pragma comment(linker, "/merge:.rdata=.text")
合併區段。我認爲是沒什麼必要,編譯的時候會有警告。VS2010編譯後可能會出現程序不能正常運行,VC6.0的正常,不推薦。
#pragma comment(linker, "/OPT:NOWIN98")
不對Windows 98系統作優化。VS2010已經取消了這個選項,若是加上這句話,編譯的時候會出現警告。VC6.0加着句話,也能減小很多的體積。VC6.0上,推薦使用。
OPtimization Minimize Size(/O1)
C/C++選項裏的,最小體積編譯,效果不明顯。
最後看下效果:
Code Snippet
這段代碼使用VS2010編譯後體積也只有3K。其餘一些優化,對體積的影響不明顯,基本能夠忽略不計。不過你們有興趣的話,能夠本身測試。若是找到其餘優化的方法也記得和我說下