C++中的类/函数模板占用了我的二进制文件的百分比是多少?
What percentage of my binary is taken up by a class/function template in C++?
我是一名游戏开发人员,我经常发现自己在为我的需求编写专门的模板化容器。
在看了我(现在)最喜欢的一个 cppcon演讲后,我有兴趣找到给定类/函数模板占用的最终二进制文件的百分比,以确定一些提升是否有益。
在这里,Nicolas提到育碧的程序员使用他们内部的.obj分析器来确定他们的Array
类占用了他们总二进制大小的~80%,然后他们通过提升将其降低到~15%(在调试目标中)。
我想知道如何编写这样的工具。具体来说,我正在寻找一种可以告诉我的工具:
- 给定一个类的未修改名称的类的所有成员和非成员函数所占的总二进制大小的百分比,以及
- 单个函数(成员或非成员)给定其未修改的名称所占的总二进制大小的百分比。
我想知道如何在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 工具的某种组合可用于获取此类信息。
如果你的解决方案包含一系列记录良好的工具,我不需要解释。但是,如果您编写自定义工具,我想对您的方法有一个广泛的概述。
您可以使用调试信息编译程序,因此具有每个符号位置的符号表将出现在可执行标头中。例如,使用 readelf 或 objdump 来获取此信息。
相关文章:
- 如何从二进制文件中的给定符号中获取调用程序图
- 计算二进制文件中的位数
- :-1: 错误: LNK1104: 无法打开文件"我的项目.obj"
- 读取二进制文件大小的短自上周以来停止工作
- vs comperied二进制文件中的符号
- 是与视觉C 2017二进制文件兼容的Visual C 2013二进制文件
- 如何编辑二进制文件中的特定值
- 二进制文件中的某些数据如图所示,并以奇怪的方式显示OS
- 在C 中输出到二进制文件中的麻烦
- 使用 Python "cPickle.load"加载C++编写的二进制文件时的 EOFError
- 如何获取与 objdump 输出的标签相对应的 ELF 二进制文件中的文件偏移量
- 视觉读取来自二进制文件C 的2D向量
- 从二进制文件 C++ 读取的字符串数组写入
- 将从二进制文件读取的字符串转换为整数
- 预编译的头文件和预编译的二进制文件之间的区别是什么
- 计算 c# 中二进制文件符号的频率不起作用,但适用于等效的 c++ 代码
- 检测二进制文件数据的端性
- 保存并加载二进制文件中的提升::时间::steady_clock::time_point
- gcc为不同路径的相同代码库生成的二进制文件中的差异
- 如何仅将 16 位分配给二进制文件中的任何整数,而不是C++中的正常 32 位