使用 LIBCTINY.LIB 为 EXE 和 DLL 文件 减肥
2007-03-17 21:26:43 来源:WEB开发网本文示例源代码或素材下载
在 October 1996 column 我讨论过一个有关可执行文件大小的问题。那个时候,一个简单的 hello world 程序大约有32KB。在 Visual C++® 编译器更新了两个版本后,文件尺寸问题稍微得到了改善,同样的程序使用 Visual C++® 6.0 编译器现在只有28KB。在那时的专栏里,我使用了一个小的运行库来创建极小的可执行程序。虽然有不少局限,但是对决大多数的程序来说,它们运转得很好。这些局限已经存在相当长的一段时间了,我决心修正它们。同时也提供一个学习如何进一步减少程序的尺寸的鲜为人知的知识。
DLL 和 EXE 的尺寸
在替换运行库之前,我们得先花点时间看看为什么EXE和DLL的大小比你想象的要大。考虑下面标准的 Hello World 程序:#include <stdio.h>
使用下列命令编译并产生一个map文件(译者著:如果 CL 不能正确执行,在控制台下先执行VC98BinVCVARS32.BAT)
void main()
{
printf ("Hello World!
" );
}Cl /O1 Hello.CPP /link /MAP
首先,查看 .MAP 文件(Figure1展示了一个裁减过的版本),从 main (0001:00000000) 和 printf (0001:0000000C) 的地址来看,可以推断主函数只有 oxC 字节的长度。再看这个文件的最后一行 __chkstk( 0001:00003B10),可以估计可执行代码至少有 0x3B10 字节,其中将近14KB的代码将 Hello World 送到屏幕。
现在,再看看.MAP 文件中的其它行。有些项是有用的,比如,__initstdio 函数支持 printf 将输出写到文件,所以这类支持 stdio 的库函数是有意义的。再如 strlen,它会被printf调用,所以它包含在 .MAP 中就不足为奇了。
- ››使用脚本恢复WinXP系统的用户登录密码
- ››使用phpMyadmin创建数据库及独立数据库帐号
- ››使用Zend Framework框架中的Zend_Mail模块发送邮件...
- ››使用cout标准输出如何控制小数点后位数
- ››使用nofollow标签做SEO的技巧
- ››使用 WebSphere Message Broker 的 WebSphere Tra...
- ››使用SQL Server事件探查器做应用程序的性能分析
- ››使用SQL Server事件探查器分析死锁原因
- ››使用纯文本文件打造WCF服务
- ››使用 Dojo 开发定制 Business Space 小部件,第 4...
- ››使用 ADDRESS 与 INDIRECT函数查询信息
- ››使用 COLUMN函数编制单元信息
更多精彩
赞助商链接