来自编译器的模板实例化统计信息

时间:2014-10-12 15:13:31

标签: visual-c++ c++11 g++ clang template-meta-programming

有没有办法在翻译单元或整个项目(共享对象/可执行文件)中获取实例化模板的摘要(具有什么类型和次数 - 如直方图)?

如果我有一个很大的代码库,并且我想利用C ++ 11 extern关键字,我想知道哪些模板在我的项目中最常用(或者从stl的内部 - 像{例如{1}}。

是否可以为每个模板实例化分配权重(编译器花费的时间)?

即使只有一个(启用了c ++ 11)编译器给我这样的统计数据,我也会很高兴。

用Clang的LibTooling实现这样的事情有多难?

这是否合理?许多人告诉我,我可以在没有使用工具的情况下推断出我应该使用哪些模板实例...

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题。

如果您正在使用开源编译器,那么制作一个跟踪所有模板证据的simple change to the source code并不难。

如果这听起来太麻烦,您还可以尝试强制编译器在给定符号的每个模板实例化上生成警告。 Steven Watanabe写了set of tools,可以帮助你。

最后,可能最好的选择是使用编译器生成的调试符号(或映射文件)来跟踪每个函数在最终图像中出现的次数,更重要的是它增加了多少重量以字节为单位这种工具的最佳示例是Andrian Stone的SymbolSort,它基于Microsoft的工具集。另一个类似的工具是Map File Browser