WEB开发网
开发学院软件开发VC 使用 LIBCTINY.LIB 为 EXE 和 DLL 文件 减肥 阅读

使用 LIBCTINY.LIB 为 EXE 和 DLL 文件 减肥

 2007-03-17 21:26:43 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 在 October 1996 column 我讨论过一个有关可执行文件大小的问题,那个时候,使用 LIBCTINY.LIB 为 EXE 和 DLL 文件 减肥,一个简单的 hello world 程序大约有32KB,在 Visual C++® 编译器更新了两个版本后,再如 st

本文示例源代码或素材下载

在 October 1996 column 我讨论过一个有关可执行文件大小的问题。那个时候,一个简单的 hello world 程序大约有32KB。在 Visual C++® 编译器更新了两个版本后,文件尺寸问题稍微得到了改善,同样的程序使用 Visual C++® 6.0 编译器现在只有28KB。在那时的专栏里,我使用了一个小的运行库来创建极小的可执行程序。虽然有不少局限,但是对决大多数的程序来说,它们运转得很好。这些局限已经存在相当长的一段时间了,我决心修正它们。同时也提供一个学习如何进一步减少程序的尺寸的鲜为人知的知识。

DLL 和 EXE 的尺寸

在替换运行库之前,我们得先花点时间看看为什么EXE和DLL的大小比你想象的要大。考虑下面标准的 Hello World 程序:#include <stdio.h>
void main()
{
  printf ("Hello World!
" );
}
使用下列命令编译并产生一个map文件(译者著:如果 CL 不能正确执行,在控制台下先执行VC98BinVCVARS32.BAT)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 中就不足为奇了。

1 2 3 4 5 6  下一页

Tags:使用 LIBCTINY LIB

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接