vs2010 vc6 編譯體積優化 .

vs2010 vc6 編譯體積優化 .

  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
  1. #include <windows.h>
  2. #pragma comment(lib,"kernel32.lib")
  3. #pragma comment(lib,"user32.lib")
  4. #pragma comment(linker, "/SUBSYSTEM:windows")
  5. #pragma comment(linker, "/ENTRY:main")
  6.  
  7. int main()
  8. {
  9.     MessageBox(NULL, TEXT("hello!"), TEXT("hi"), 0) ;
  10.     return 0 ;
  11. }

 

 

 

這段代碼使用VS2010編譯後體積也只有3K。其餘一些優化,對體積的影響不明顯,基本能夠忽略不計。不過你們有興趣的話,能夠本身測試。若是找到其餘優化的方法也記得和我說下

相關文章
相關標籤/搜索