VC++下编译 程序“减肥”
在vc6 和 vs 2008下 编译 以下代码,不更改任何编译设置(vc6 40k , s2008 7k)。
一、vc6下,Release 模式 编译处理。
1、去掉不必要的 链接库 工程(Project)-->设置(Settings)-->链接(link)属性页-->对象库/模块(object/library modules) 去掉所有的lib。
选择使用 MSVCRT.LIB kernel32.lib user32.lib。 可以忽略不必要的警告,比如 LINK:warning LNK4098: default lib "LIBC " conflicts with use of other libs; use /NODEFAULTLIB:library
2、工程(Project)-->设置(Settings)-->链接(link)属性页-->在Project Options(工程 选项)
下面的编辑框里加上一句: /ALIGN:2的n次方 这样做之后指定了程序不是驱动程序,系统可以设定的最值不同。
按照处理之后,生成程序 /ALIGN:4096 (3k) /ALIGN:16 (1.59k) /ALIGN:128 (1.87k)。
二、在代码中添加相应的编译设置,达到缩小程序体积的目的。
1、无优化
#include <windows.h>
int main()
{
MessageBox(NULL,TEXT("hello!"),TEXT("hi"),MB_OK);
return ;
}
2、代码中设置
#include <windows.h> //自定义加载的库 #pragma comment(lib,"kernel32.lib") #pragma comment(lib,"shell32.lib") #pragma comment(lib,"msvcrt.lib") //自定义函数入口 #pragma comment(linker,"/ENTRY:EntryPoint") //自定义对齐方式 #pragma comment (linker,"/ALIGN:512") #pragma comment(linker,"/FILEALIGN:512") // 优化选项 #pragma comment(linker,"/opt:nowin98") #pragma comment(linker,"/opt:ref") //清除从未引用的函数和/或数据 #pragma comment (linker, "/OPT:ICF")//从链接器输出中删除冗余COMDAT // 合并区段 #pragma comment(linker,"/MERGE:.rdata=.data") #pragma comment(linker,"/MERGE:.text=.data") #pragma comment(linker,"/MERGE:.reloc=.data") int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow ) ; void EntryPoint()
{
ExitProcess(WinMain(GetModuleHandle(NULL), NULL,GetCommandLine(), SW_SHOWNORMAL));
} int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int iShowCmd )
{
MessageBox(NULL,TEXT("hello!"),TEXT("hi"),MB_OK);
return ;
}
经过 上述代码优化,可以将 40k的程序 缩小 为 1k 的程序。
三、
最简单的窗口程序:
#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,hPrevInstance,LPSTR szCmdLine,int iCmdShow){ MessageBox(NULL,"Hello World","Hello",);
return ;
}
在VC6.0下以Release方式编译,大小为36,864字节(36.0KB)。用CFF Explorer工具查看可执行文件,
可以看出,文件导入了2个动态库,其中user32.dll仅导入了程序中使用的函数MessageBoxA,kernel32.dll导入了38个函数,显然是WinMain中调用的。
2、把WinMain去掉,自己给定程序入口函数,重写代码如下:
#include <windows.h> #pragma comment(linker,"/ENTRY:EntryPoint")//自定义入口函数 void EntryPoint() { MessageBox(NULL,"Hello World","Hello",0); ExitProcess(0); }
重新编译,文件大小为16384字节(16.0KB)。再用CFF Explorer工具查看可执行文件,结果如下图所示。
可以看出,虽然仍导入了2个动态库,但kernel32.dll只导入了一个上述代码中调用的函数ExitProcess。导入函数的减少使文件大小减小了约20KB。
3、在记事本中打开可执行文件,可以发现文件中存在大量的空字符。
用CFF Explorer工具查看文件节表信息。文件的节表信息如下图所示。
aaarticlea/png;base64,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" alt="" />
aaarticlea/png;base64,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" alt="" />
可以看出,文件中存在3个节(.text、.rdada、.data),每个节在文件中对齐后的大小和映射到内存后的大小(实际大小)分别由Raw Size和Virtual Size指出。其中.data节实际大小为0x12(18)字节,与"Hello World"和"Hello"这两个字符串的大小(含结束符\0)一致,却占用文件0x1000(4096)字节大小,故文件中存在大量的空字符(数值为0)。
4、是否可以修改节的对齐方式,更改文件的大小呢?
使用链接器/FILEALIGN和/ALIGN选项可以帮我们做到这一点。
其中/FILEALIGN用来指定节在文件中的对齐方式,/ALIGN用来指定节加载到内存后的对齐方式,对齐字节数必须是2的幂。
修改后代码如下:
#include <windows.h> #pragma comment(linker,"/ENTRY:EntryPoint")//自定义入口函数 #pragma comment(linker, "/FILEALIGN:16")//指定节的文件对齐方式 #pragma comment(linker, "/ALIGN:16")//指定节的内存对齐方式 void EntryPoint() {
MessageBox(NULL,"Hello World","Hello",); ExitProcess();
}
重新编译,文件大小为800字节,程序仍能正常运行。进一步该小/FILEALIGN和/ALIGN的参数,将能编译但无法运行或编译通不过。
5、 还能减小文件的体积吗?是的。
上述说到该文件存在三个节表和相应的三个节,使用链接器/MERGE选项可以把三个节合并,从而进一步压缩文件。
修改后代码如下:
#include <windows.h> #pragma comment(linker,"/ENTRY:EntryPoint")//自定义入口函数 #pragma comment(linker, "/FILEALIGN:16")//指定节的文件对齐方式 #pragma comment(linker, "/ALIGN:16")//指定节的内存对齐方式 #pragma comment(linker, "/SECTION:.text,ERW")//指定节属性 #pragma comment(linker, "/merge:.rdata=.text")//合并节.rdata到.text #pragma comment(linker, "/merge:.data=.text")//合并节.rdata到.text #pragma comment(linker, "/IGNORE:4078")//忽略4078错误 void EntryPoint()
{
MessageBox(NULL,"Hello World","Hello",); ExitProcess();
}
重新编译,文件大小为704字节,相对初始大小(36KB)已有了明显的变化。
Section信息 如下:
aaarticlea/png;base64,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" alt="" />
6、 另外,程序优化有时也能减小文件体积:
#pragma comment(linker, "/OPT:REF")//清除从未引用的函数和/或数据
#pragma comment(linker, "/OPT:ICF")//从链接器输出中删除冗余COMDAT
除上述方式外,工程中的一些设置也可以很大程度减小文件体积。
结束!
VC++下编译 程序“减肥”的更多相关文章
- VC++下编译Libgeotiff(含Libtiff)
转自原文Win10+VC++下编译Libgeotiff(含Libtiff)详细图文教程 GeoTiff是包含地理信息的一种Tiff格式的文件.Libgeotiff就是一个操作GeoTiff文件的库.同 ...
- 在Window下编译LibGeotiff(含Libtiff)
核心提示:1.GeoTiff简介 GeoTiff是包含地理信息的一种Tiff格式的文件. 1.GeoTiff简介 GeoTiff是包含地理信息的一种Tiff格式的文件.Libgeotiff就是一个操作 ...
- Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)
参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Lin ...
- VC++2010下编译STLport,Boost
VC++2010下编译STLport,Boost 最近在想向Boost转移,努力掌握Boost代码的过程中, STLport版本:5.2.1 Boost版本:1.4.6.1 (1.4.7.0也OK) ...
- 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序
如何用javac 和java 编译运行整个Java工程 (转载) http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...
- 在SoCEDS环境下编译和更新preloader和uboot程序的方法
在SoCEDS环境下编译和更新preloader和uboot程序的方法 前面有介绍preloader在HPS boot过程中的的作用,接下来讲述下用户在SoCEDS环境下改如何编译preloade ...
- Linux下C程序的编辑,编译和运行以及调试
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- [置顶] ubuntu12.04下编译opencv程序
ubuntu12.04下编译opencv程序 1.在ubuntu下安装好 opencv后(建议使用apt-get install 来安装) 2.使用程序FaceExaple.c来进行测试程序 #inc ...
- Linux环境下编译并执行ava helloworld程序
原文:http://blog.lupaworld.com/home-space-uid-24466-do-blog-id-2578.html 已经学会怎样在Windows下怎样编辑,编译和运行Java ...
随机推荐
- Express+Mongoose(MongoDB)+Vue2全栈微信商城项目全记录
最近用vue2做了一个微信商城项目,因为做的比较仓促,所以一边写一下整个流程,一边稍做优化. 项目github地址:https://github.com/seven9115/vue-fullstack ...
- 【ASP.NET MVC 学习笔记】- 19 REST和RESTful Web API
本文参考:http://www.cnblogs.com/willick/p/3441432.html 1.目前使用Web服务的三种主流的方式是:远程过程调用(RPC),面向服务架构(SOA)以及表征性 ...
- 有序线性表(存储结构数组)--Java实现
/*有序数组:主要是为了提高查找的效率 *查找:无序数组--顺序查找,有序数组--折半查找 *其中插入比无序数组慢 * */ public class MyOrderedArray { private ...
- 基于vip和twemproxy代理实现redis集群的无感知弹性扩容
目标是实现redis集群的无感知弹性扩容 关键点 1是无感知,即对redis集群的用户来说服务ip和port保持不变 2.弹性扩容,指的是在需要时刻可以按照业务扩大redis存储容量. 最原始的twe ...
- PyQt5安装目录中找不到designer.exe与pyrcc5.exe
我安装的是PyQt5的5.9版本,在安装目录下找不到designer.exe文件.在摸索一段后发现5.9版本对库文件和相关的开发工具是分开发布的.QtDesigner是在pyqt5-tools的包里. ...
- Leetcode题解(26)
80. Remove Duplicates from Sorted Array II 题目 分析:简单的操作,代码如下: class Solution { public: int removeDupl ...
- shuffle过程简介--笔记
数据保存在hdfs上 拿到数据后分片处理 输入到Map 输出键值对 写到缓存,满的时候溢写到磁盘 缓存的数据写入磁盘的过程中,分区排序,合并 多个磁盘文件归并 通知Reduce任务拉取 Map端的sh ...
- 新手入门Flume搭建部署
在root的用户下 1):• 前提 安装JDK环境 2):• 在官网下载Flume,http://mirror.bit.edu.cn/apache/flume 既是:wget http://mirr ...
- js判断对象还是数组
1.对于Javascript 1.8.5(ECMAScript 5),变量名字.isArray( )可以实现这个目的 var a=[]; var b={}; Array.isArray(a);//tr ...
- 对象作为 handleEvent
elem.addEventListener("click", obj, false); //用对象作为处理函数 var obj = { handleEvent: ...