减小Exe, DLL 的大小问题 - VC

2016-02-19 18:40 41 1 收藏

下面这个减小Exe, DLL 的大小问题 - VC教程由图老师小编精心推荐选出,过程简单易学超容易上手,喜欢就要赶紧get起来哦!

【 tulaoshi.com - 编程语言 】

1. 普通Exe 文件

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

包括运行时库, 都不用.

当然如果大家要用相关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, 而不用调用运行库了. 这样可以大大减小.

连接设置:

#ifndef _DEBUG

 // default lib setting.
 #pragma comment(linker, "/defaultlib:kernel32.lib")
 #pragma comment(linker, "/defaultlib:LIBCTINY.LIB")
 #pragma comment(linker, "/nodefaultlib:libc.lib")
 #pragma comment(linker, "/nodefaultlib:libcmt.lib")

 // section size
 #pragma comment(linker, "/FILEALIGN:16")
 #pragma comment(linker, "/ALIGN:16")
 #pragma comment(linker, "/OPT:NOWIN98")

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

#endif

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

另外我的测试程序中导出了一个接口
BOOL _stdcall ExpHook( )
{
 return 0;
}

最终大小为: 992字节.

3. 复杂Dll 和复杂Exe 大小问题

如果你的程序一定要使用MFC, 那怎么编绎至少也有几十KB了.
但你还是可以用相关PE压缩程序压缩一下的. 至少能压缩到50%.

如果是COM, 建议不要使用MFC, 如果使用ATL, 可以使用压缩程序压缩一下, 基本会在20-40K 大小.

复杂类型的Dll, Exe 肯定是要使用运行库的. 像用了ATL就没有办法不用运行库了.
----------------------------------------
感谢大家对此关心, 并有相关研究请指教于我

来源:http://www.tulaoshi.com/n/20160219/1618609.html

延伸阅读
使用TextView的时候,需要长度过长自动显示省略号,android里有原生的支持,定义如下: 代码如下: TextView ... android:ellipsize="end" android:singleLine="true"/ 一看确实可以使用,但仔细观察,发现在省略号…的后面有一个方框,类似于出现乱码那种字符,这是为什么呢? 原来android里的ellipsize在处理字符串的时候,如果发现...
    在烹饪美食时,会碰到各种各样的小麻烦、小困惑,以下五个小妙招,可有效地助人们解决烹饪中遇到的小麻烦。     巧煮咸肉提鲜味在煮肉之www.tulaoshi.com前,先用水加少量醋清洗一遍,去除表面异味。在煮咸肉时放一个白萝卜,然后再烹调,不仅可以去除咸肉特殊的辛辣味,还可以提升咸肉的鲜味。     巧使...
标签: 孕期
孕妇要警惕的“小问题” 孕妈妈们自从怀孕之后需要注意的事情就变得很多了,虽然孕妈妈做到了不少,但是还有很多的小问题需要注意的,图老师小编就总结了4个小问题和各位孕妈妈进行分享。 Tulaoshi.com1、感觉疲惫时泡个热水澡 当身体感到休闲的时候可以在浴缸中放满热水泡上半个小时,真是既舒服又能够消除疲劳。...
标签: 孩子 小孩
别让小问题彻底抹杀孩子的智力 妈妈并非完人,有时候也会因为常识欠缺或工作忙碌而忽视孩子的一些特别行为及生活中的一些细节。殊不知,小小的疏忽也常常会给宝宝智力造成严重的不良后果。 失误1 带孩子来到装修未完毕的住宅 就快搬新家,当然令人兴奋,但如果妈妈经常带孩子光顾自己尚未完工的新屋的话,...
标签: 电脑入门
一、以1磅为单位快速增大(减小)字号 在选中文字的情况下,每按动一次如下的两种快捷键,会分别增大或减小文字字号。 Ctrl+]增大文字字号1磅,多按几次或者是迅速按几次,就会符合你的要求了。 注意哦,] 这个符号是右中括符号。 Ctrl+[减小文字字号1磅,多按几次或者是迅速按几次,就会符合你的要求了。 注意哦,[ 这个符号是左中括符号。...

经验教程

295

收藏

27
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部