经过三年的 C++ 项目工作,可执行文件已增长到 4 MB。我想看看这些空间都去哪儿了。有没有一种工具可以报告最大的太空霸主是什么?如果能按类(类中的所有函数)、模板(所有实例化)和库(有多少属于 C 标准库和 STL?exe 中的每个库有多少?)来查看大小,那就太好了
编辑:注意,我在 Windows 上使用 Visual C++。
In Linux, 您可以使用nm http://linux.die.net/man/1/nm显示可执行文件中的所有符号并按大小逆序对它们进行排序:
$ nm -CSr --size-sort <exe>
Options:
-
-C
解构 C++ 名称。
-
-S
显示符号的大小。
-
--size-sort
按大小对符号进行排序。
-
-r
反转排序。
如果您想获取每个命名空间或每个类的结果,您可以grep
' 的输出namespace::
', 'namespace::class_name::
', etc..
如果您只想查看已定义的符号in可执行文件(不是在其他地方定义的,例如在库中)然后添加--defined-only
。不过,按大小排序应该考虑到这一点,因为未定义的符号不会有大小。
对于 Windows,你应该仍然可以使用nm
在你的二进制文件上,因为nm
支持COFF http://en.wikipedia.org/wiki/COFF二进制文件。您可以安装nm
通过 cygwin,或者您可以将 Windows 可执行文件复制到 Linux 机器并运行nm
在那儿。
你也可以尝试dumpbin http://msdn.microsoft.com/en-us/library/c1h23y6c(VS.71).aspx,它转储有关 Windows 上的二进制文件的信息。您可以使用以下命令获取有关符号的信息/SYMBOLS
开关,但看起来它并没有直接提供有关其大小的信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)