使用 LIBCTINY.LIB 为 EXE 和 DLL 文件 减肥
2007-03-17 21:26:43 来源:WEB开发网LIBCTINY: 最小的运行库
现在你明白为什么一个简单的 EXEs 和 DLLs 有如此大了,也是时候介绍我的运行库了。在 October 1996 column,我建立了一个静态的 .LIB 文件代替微软的 LIBC.LIB 和 LIBCMT.LIB 。我称之为 LIBCTINY.LIB,它是从微软运行库分离出来的一个微缩版。
LIBCTINY.LIB臆在支持不需要大运行库的小应用程序,但是,它不适于用在 MFC 以及其它复杂的 Visual C++ 扩展运行库。理想的 LIBCTINY.LIB 使用者是一个只调用 Win32 API 的 DLLs 或 EXEs 来输出信息。
LIBCTINY.LIB 有两个指导性准则。第一,它将标准的 Visual C++ 启动例程替换成非常简单的代码。这段代码不涉及任何复杂的运行库函数,如 __crtLCMapStringA。如你呆会儿要看到的,LIBCTINY.LIB 在启动 WinMain, main 或 DllMain之前只执行一些很小的任务。第二, LIBCTINY.LIB 将复杂的函数实现如 malloc 或 printf 尽量替换为已有的Win32系统调用。所以不仅启动代码短小,大部分其他 LIBCTINY.LIB 的函数实现如 malloc, free, new, delete, printf, strupr, strlwr 等等都是非常简单的,查看一下 printf 在 printf.cpp (Figure2)实现就会明白我所说的了。
老版本的 LIBCTINY.LIB 中的约束令我很是苦恼。首先,原始版本不支持 DLLs。你只能创建控制台或者 GUI 程序,而不能创建一个小的DLL。其次,原始的 LIBCTINY 不支持 C++ 的构造和析构。当然,我说的是在全局范围内申明的构造器和析构器。在新版本中,我添加了对这些的支持。同时也了解到编译器和运行库为了让构造器和析构器运转是多么的复杂的一件事。
- ››使用脚本恢复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函数编制单元信息
更多精彩
赞助商链接