如何减少可执行文件大小?

 减少exe(dll)的代码,主要从几个方面能够入手:


  1.代码质量.Consider refactoring when you try to copy & paste code. 拷贝代码不仅是  造成代码的难以修改和维护,而且也增加最后可执行文件的大小.


  2.尽量的使用系统的动态链接库,比如kernel32.dll 等各个版本的系统必备的DLL. 象有些dll就不  行,例如msvcrt.dll在 win98上就没有. 但是项目使用到别的库经常是没法避免的,比如STL.


  3.编译器选项(特别是链接器选项)优化. 用AppWizards建立一个Hello,world的GUI Win32程序,不加入任何代码,Release编译后也有40KB. 用Denpendency walker打开看看, 发现Kernel32.dll中引用了很多函数,但是实际上你的代码里面都没有引用到,那是因为默认链接器是把C Runtime library静态链接到你的代码里面去了,而你可能并没有使用到任何C Runtime Library的函数 .因此第一步就是在linker选项里面勾上ignore default libraries(这将使得链接器不在默认链接CRT). 然后加上你需要引用的库,例如kernel32.lib, 另外还需要设置EntryPoint(因为默认使用的是C Runtime Libray中的_mainCRTStartup 或者_WinMainCRTStartup函数). 第二步,加上/OPT:REF /OPT:ICF /OPT:NOWIN98 最后一个参数一般都能让exe进一步减少.另外是段合并(merge section)的优化,即把.rdata .text段都合并到.data段里面,但是这个优化并不推荐. 最后就是对齐的优化, /FILEALIGN(只能用在VC6上面),通过减少这个值能够去掉代码中由于对齐而产生的多余代码. 详细参考可以见参考资料第二个链接. 编译器的选项,minize code size以及global optimization + favor small code也能够减少,但是通常不会减少得很多.


  4. exe压缩器. aspack,upxshell是用得最多的exe压缩器,通常可以把可执行文件减少一半左右.

 

上面是我从一篇文章“如何减小可执行文件的大小 - minimize your excutables  ”中找到的,作者是针对Win32下的VC程序写的,但是很多道理是相通的。下面介绍一个wm可执行文件的压缩工具:

 

UPX4PPC一个在PPC上使用的加壳和脱壳工具,简单说它可以压缩执行文件(exe)和动态链接库(dll),压缩率在50%左右(如PocketMusic5.06主程序原为800k,压缩后只有313k),这就极大的节省了俺们的存储空间,也可以用在自己定制的ROM中,如压缩Office6.1中的dll文件
      ★使用说明:
      1、软件是绿色版的,放哪都行,包括可以在中文路径下—但是,但要处理目标文件的路径就不得包含中文名称,比如‘“SD 卡/播放器.exe”,这就无法正确处理。
      2、大家还要注意压缩前备份很重要,并不是所有文件压缩后都可以正常使用,虽然压缩后可以用它解压缩,但保存原文件要好点,确定压缩后的软件使用正常再删除备份文件。
      3、关于UPX4PPC的解压缩功能,只能解压相同版本压缩的文件,不能向下兼容
      4、压缩方面使用“最大量”的压缩率会高于“最高速”,但也不绝对,如NFBrowser35.dll使用“最大量”压缩无效,但可使用“最高速”压缩
      ★已知不可压缩的文件
      PPC软件众多,希望大家把你所压缩后不能正常使用的软件贴出,避免兄弟们走弯路
      1、资源管理器Resco Explorer,压缩后图标不正常,部分文字不能显示
      2、音乐播放器PocketMusic的语言文件mui.0804.dll,压缩后文字显示不正常
      3、系统工具SKTools,压缩后不能启动
      4、浏览器picselbrowser,压缩后不能启动
      5、浏览器NetFront3.5语言文件NFB35Res.dll,压缩后部分文字不能显示
      6、词典工具MDict不能压缩图标
      7、超频软件XCPUScalar.exe,压缩后无法启动
      ★压缩原理:就是把可执行文件先当数据压缩,当然不完全是当数据了,然后附件在一小段解压代码后面;这样文件就很小了,在运行时,先运行的是那段解压代码,解压真正的文件到内存,再运行。弊端就是多耗一点点运行内存,不过非常小,可以忽略不计;再就是耗时间,要解压,所以程序启动会慢一点,但一般觉察不到。


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值