分析DLL / LIB膨胀
我在VS2005中继承了一个相当大的C ++项目,编译成一个大约5MB的DLL。 我希望减少库的大小,以便通过网络为从慢速网络共享中使用它的客户端加载速度更快。
我知道如何通过分析代码,包含和项目设置来做到这一点,但是我想知道是否有可用的工具可以更容易地确定哪些代码部分占用了大部分空间。 有什么办法可以生成DLL布局的“配置文件”? 什么是消费图书馆形象的空间和多少的报告?
当您构建DLL时,可以将/ MAP传递给链接器,使其生成包含生成图像中所有符号地址的映射文件。 您可能必须执行一些脚本来计算每个符号的大小。
使用“字符串”实用程序扫描您的DLL可能会发现意外或未使用的可打印字符串(例如资源,RCS ID, __FILE__
宏,调试消息,断言等)。
另外,如果您尚未使用/ Os启用编译,那么值得一试。
如果您的最终目标只是调整DLL的大小,那么在调整编译器设置后,您可能会通过通过UPX运行DLL来获得最快的结果。 UPX是一个很好的DLL和EXE压缩工具; 它也是开源的非病毒许可证,因此可以在商业/闭源产品中使用。
我只会在最高压缩设置(暴力破解选项)上出现病毒警告,因此如果您使用的设置较低,则可能会很好。
虽然我不知道任何二进制大小的配置文件,但您也可以查找哪些目标文件(.obj)最大 - 这会让您至少知道有问题的位置在哪里。
当然,这需要一个充分模块化的项目。
下一篇: What are some techniques or tools for profiling excessive code size in C/C++ applications?