程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 減小Exe, DLL 的大小問題 - VC

減小Exe, DLL 的大小問題 - VC

編輯:vc教程

1. 普通Exe 文件

完全可以使用下面方法:
A. link標記: /nodefaultlib
代表: Ignore all default libraries

包括運行時庫, 都不用.

當然如果大家要用相關c運行時庫的api 怎麼辦呢?
可以使用相關對應的API, 比如strcmpi, 使用lstrcmpi, 詳細請參考下表:

Standard function Win32 equivalent
malloc HeapAlloc
free HeapFree
strcpy lstrcpy
strcat lstrcat
strncpy lstrncpy
strncat lstrncat
strlen lstrlen
strcmp lstrcmp
strcmpi lstrcmpi
memcpy CopyMemory
memset FillMemory or ZeroMemory
memmove MoveMemory
toupper CharUpper
tolower CharLower
isalpha IsCharAlpha
isalnum IsCharAlphaNumeric
islower IsCharLower
isupper IsCharUpper
sprintf wsprintf
vsprintf wvsprint


B. 設置連接節大小及其他
加入下面代碼到cpp文件就可以.

#ifndef _DEBUG  
 #pragma comment(linker, "/FILEALIGN:16") 
 #pragma comment(linker, "/ALIGN:16")  

 #pragma comment(linker, "/OPT:REF")
 #pragma comment(linker, "/OPT:ICF")
 #pragma comment(linker, "/OPT:NOWIN98")  // 使用老VC編繹器的512大小為一節

 // 合並段
 #pragma comment(linker, "/MERGE:.rdata=.data")
 #pragma comment(linker, "/MERGE:.text=.data")
 #pragma comment(linker, "/MERGE:.reloc=.data")

 // Favour small code
 #pragma comment(linker, "/ENTRY:WinMain")
#endif

如果是少量代碼的Exe 程序, 最終大小可以在1500 字節以內.
我曾寫過一個程序使用了文件讀寫, 執行進程, 字符運算, 等等一共50多行代碼, 最終大小為: 1488字節.

C. 不幸的是可能還是要使用c運行庫
那可以使用這個 LIBCTINY.LIB文件, 以盡量減小. 當然這個lib 本身包括不多的運行庫api.
LIBCTINY.LIB 文件以及源程序參考:
http://msdn.microsoft.com/msdnmag/issues/01/01/hood/default.aspx

2. 普通Dll 大小問題

因為: __DllMainCRTStartup 或: _DllMainCRTStartup 要調用運行時庫
還好, LIBCTINY.LIB 裡面已經有相關實現, 可以用LIBCTINY.LIB, 而不用調用運行庫了. 這樣可以大大減小.

  • 首頁
  • 上一頁
  • 1
  • 2
  • 下一頁
  • 尾頁
  • 共2頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved