DevC++开发程序大瘦身

      这两天使用了一下“DevC++”,发现编译出来的可执行文件体积相对(相对使用VS6)比较大(一个简单的控制台程序使用C++语言,编译连接后生成了一个400多KB的可执行文件。)。我就想试着找找问题的原因,看看能不能对可执行文件的体积进行优化。

      我的第一个目标是对连接进行优化:打开工程选项->编译器->连接器 选择不产生调试信息(默认选择) 选择剥除附加信息(默认不选择)。      编译连接后可执行文件的体积比原来小了200kB。

      不错有了一定的改进,再想想。我用十六进制编辑器打开可执行体看了看,奇怪怎么有这么多的C++的标准基类操作例如:basic_string::at 还有一些时间日期的常量如:AM PM Sunday  Sun等等。还有一些常见的文件操作:fopen fputc。

     看到这些我心中有些想法就是为什么会有这些东西?这些东西在本程序中可是没有用到的呀?我就开始猜测,是不是因为DevC++使用的是GCC的编译器所以会这样子,而这些看起来如同标号一样的东西是不是就是iostrem库的静态连接//目前是这么认为的,等我看了Load+Link后可能就会知道这是什么东东了。

     看来是不能再优化了,总不能把静态的连接库给去掉吧。//如果有时间要仔细研究一下GCC的参数,应该还可以进行优化。

     再想想,再想想。对了这里面如果确是C++的部分标准库代码,那么如果使用C代码的话编译连接出来的可执行文件大小应该会有所变化。继续战斗:我又用C写了一次代码,进行编译连接。完成后运行,没有问题;再看看执行体的大小,17KB。我的天啊,怎么这么小!

   

    经过这几步的测试,进行一下总结。

    首先我有几个猜测:

    第一、GCC在Windows下的实现,可执行体中包括一定量的标准库二进制代码。

    第二、VC可能通过动态库大大的减小了可执行文件的大小。

    第三、C代码体积比C++要小很多,是由于C不具有C++许多对于面向对象功能的原生支持。

    其次以后开发程序的时候有注意:

    第一、使用C实现,可以有效的减小可执行体的体积。//如有需要

    第二、软件规模大了以后多使用动态连接库实现功能,可以有效的减小可执行体的体积并可以对部分功能进行升级。

你可能感兴趣的:(DevC++开发程序大瘦身)