我的二进制文件占C ++中类/函数模板的百分比是多少?

时间:2017-05-22 02:36:51

标签: c++ templates

我是一名游戏开发人员,我经常发现自己会根据自己的需要编写专门的模板化容器。

在观看我最喜欢的一个cppcon谈话之后,我有兴趣找到我的最终二进制文件的百分比,该二进制文件由给定的类/功能模板占用,以确定是否有一些提升是有益的。

Here,Nicolas提到Ubisoft的程序员使用他们的内部.obj分析器来确定他们的Array类在他们将其归结为〜之前占用其总二进制大小的约80% 15%(在调试目标中)通过吊装。

我想知道如何编写这样的工具。具体来说,我正在寻找一个可以告诉我的工具:

  1. 给定其未命名的名称的所有成员和非成员函数占用的二进制文件总大小的百分比
  2. 单个函数(成员或非成员)在给定其未命名的名称时所占的二进制文件总大小的百分比。
  3. 我想知道如何在Windows和Linux环境中为使用gcc,clang和Microsoft编译器编译的代码执行此操作。

    例如,我想要的是:

    ./<toolname> <compiler sepecific options and/or whatever> <class/function name> \
    <list of object files>
    

    如果要求函数的大小:

    Summary for function <name>:
    Total Size: <size in bytes> (<percentage>)
    

    如果要求课程的大小:

    Summary for class <name>:
    Total Size: <size in bytes> (<percentage>)
        member function <name>: <size> (<percentage>)
        ...
        non-member function <name>: <size> (<percentage>)
        ...
    

    我相信我可以通过一个稍微不重要的程序自己做这件事,但我认为如果有一些内置或免费提供的CLI工具的组合可以先在这里问一下这是一个好主意。用于获取此类信息。

    如果您的解决方案包含记录良好的工具组合,我不需要解释。但是,如果您编写自定义工具,我希望大致了解您的方法。

1 个答案:

答案 0 :(得分:0)

您可以使用调试信息编译程序,因此具有每个符号位置的符号表将出现在可执行标头中。例如,使用readelf或objdump来获取此信息。