Tod*_*lin 15
在Linux中,您可以使用nm显示可执行文件中的所有符号,并按大小按相反顺序对它们进行排序:
$ nm -CSr --size-sort <exe>
Run Code Online (Sandbox Code Playgroud)
选项:
-C demangles C++名称.-S 显示符号的大小.--size-sort 按大小排序符号.-r 扭转排序.如果你想获得每个命名空间或每个类的结果,你可以只grep输出' namespace::',' namespace::class_name::' 等.
如果你只想看到定义的符号中的可执行文件(不是那些在图书馆其他地方定义,等),再加入--defined-only.但是,按大小排序应该注意这一点,因为未定义的符号不会有大小.
对于Windows,您仍然可以使用nm二进制文件,因为nm支持COFF二进制文件.你可以nm通过cygwin 安装,或者你可以将你的windows可执行文件复制到linux盒子并nm在那里运行.
您也可以尝试dumpbin在Windows上转储有关二进制文件的信息.您可以通过/SYMBOLS开关获取有关符号的信息,但看起来并不直接提供有关其大小的信息.
在Visual Studio编译的Windows中,此信息位于.map文件中(它将位于.pdb附近).
增加:要将.map文件中找到的修饰名称转换为更易于阅读的名称,可以使用Visual Studio附带的undname.exe实用程序.它接受命令行上的单个名称,或者您可以为它提供.map文件.
例如,
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.
Undecoration of "?push_back@?$mini_vector@U?$Point@U?$FixedPoint@$0O@H@Math@@@Math@@$05@@QAAXABU?$Point@U?$FixedPoint@$0O@H@Math@@@Math@@@Z" is
"public: void __cdecl mini_vector<struct Math::Point<struct Math::FixedPoint<14,int> >,6>::push_back(struct Math::Point<struct Math::FixedPoint<14,int> > const &)"
Run Code Online (Sandbox Code Playgroud)