使用 LIBCTINY.LIB 为 EXE 和 DLL 文件 减肥
2007-03-17 21:26:43 来源:WEB开发网我不知道我该不该这样做,不过通过和读者的邮件交流,我坚信我并不孤独,许多朋友都跟我一样希望代码尽可能的小。现代一般用的可写光盘和快速的网络连接,是不需要担心代码尺寸。但是我在家中最快的网络连接也只有24Kbps.我讨厌浪费时间去下载一个臃肿的页面。
作为我的一个原则,我希望代码尽可能的小。我不愿意装载任何我不需要的DLLs。甚至我可能要用到一个DLLs,我都会延迟加载。我在过去的专栏里面讨论过延迟加载,如果你想熟悉它。可以先看看 Under the Hood in the December 1998 issue of MSJ for starters
深度挖掘
我们已经赶跑了程序中不必要的代码,现在我们看看可执行体本身。使用 DUMPBIN /HEADERS Hood.exe, 可以看到下面的输出:1000 section alignment
第二行很有意思。它说明代码的边界是4KB(0x1000)对齐。由于段的存储是连续的,所以很难发现段与段之间那些可能存在的4KB浪费。
1000 file alignment
如果使用Visual C++ 6.0之前版本的连接器,你有可能看到不同的结果:1000 section alignment
不同的关键在于段边界以512(0x200)字节对齐。这样空间浪费就要少得多。Visual C++ 6.0 将边界对齐适应内存的对齐,这样可以使得 windows9x 的程序装载速度提高,不过文件更大。
200 file alignment
幸运的是,Visual C++ 连接器提供返回到过去参数的方法。使用开关 /OPT:NOWIN98,重新编译,如果你使用静态连接(译者注:cl /O1 Hood.c /link /OPT:NOWIN98),那么可执行文件的大小为21KB,减少了7KB;如果使用MSVCRT.DLL动态连接(译者注:cl /O1 /MD Hood.c /link /OPT:NOWIN98),可执行文件只有2560字节。
更多精彩
赞助商链接