在网上,有好多绿色软件,不仅功能强大,而且软件本身的体积非常小。有的通常只在几十k左右。那他们是怎么做到把软件做的怎么小的呢?现在我手把手的告诉你如何通过修改程序的编译选项来瘦身你的执行文件。
先看一个最典型的程序:
#include <stdio.h> |
上面的程序之所以被称之为典型,是因为他有如下的内容:
1、系统函数调用:printf
2、有静态数据段
好,现在把此文件放到visualstudio6.0中进行编译,看看文件有多大。
1、用visualstudio6.0打开helloworld.cpp文件,直接按f7。然后点击ok,生成project文件,然后进行编译。编译完成了以后,看看debug目录下的执行文件的大小,为172,096bytes。
2、刚才编译的debug文件,现在修改成release文件看看。选择win32 release,再编译。察看执行文件大小,现在成了40,960bytes。看来debug版本的要比release的小。
3、检查代码优化:发现执行文件的优化是maximize speed。那么修改成minimizesize看看。重新编译,得到执行文件的大小为:40,960bytes。看来大小没什么变化。其实这是由于我们的代码本身太小的缘故,导致即使变化了也看不出来。
4、想想我们程序的main函数是由crt类库进行引导的。在我们现在的设定当中,由于采取的是系统缺省的编译连接方式(缺省为编译为single thread,staticlibrary),所以,在我们的执行文件当中,包含了crt的二进制代码。好,修改编译选项:c/c++ => category:code generation => use run-timelibrary:mutithreaded dll。编译看看:执行文件大小变成了16,384bytes。
5、刚才的设定确实不错,一下子把执行文件大小减小到了16k。现在用ultraedit看看执行文件都是些什么内容。结果大吃一惊:基本上都是0。看来这个有减小的必要了。都知道,执行文件都有自己的代码段,数据段等等,每个段的大小也是采用编译器缺省设定的。好,我们来修改一下段的大小看看:
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器