vc6編譯出小體積pe檔案

來源:互聯網
上載者:User

VC寫的程式體積是挺大的,網上也有很多最佳化的文章,都是針對VC6.0來說的。我把我的總結下。
 
#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,所以體積不會增加的,這個時候加不加這句話都無所謂。
 
#pragma comment(linker, "/SUBSYSTEM:windows")
 
這句是用來說明是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
 
#include <windows.h>
#pragma comment(lib,"kernel32.lib")
#pragma comment(lib,"user32.lib")
#pragma comment(linker, "/SUBSYSTEM:windows")
#pragma comment(linker, "/ENTRY:main")
 
int main()
{
    MessageBox(NULL, TEXT("hello!"), TEXT("hi"), 0) ;
    return 0 ;
}
 
 
 
 
 
 
 
這段代碼使用VS2010編譯後體積也只有3K。其他一些最佳化,對體積的影響不明顯,基本可以忽略不計。不過大家有興趣的話,可以自己測試。如果找到其他最佳化的方法也記得和我說下。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.