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

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

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

【 tulaoshi.com - 编程语言 】

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")  

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

 #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")

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

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

#endif

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

最终大小为: 992字节.

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

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

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

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

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

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

经验教程

43

收藏

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