有没有办法在翻译单元或整个项目(共享对象/可执行文件)中获取实例化模板的摘要(具有什么类型和次数 - 如直方图)?
如果我有一个很大的代码库,并且我想利用C ++ 11 extern
关键字,我想知道哪些模板在我的项目中最常用(或者从stl的内部 - 像{例如{1}}。
是否可以为每个模板实例化分配权重(编译器花费的时间)?
即使只有一个(启用了c ++ 11)编译器给我这样的统计数据,我也会很高兴。
用Clang的LibTooling实现这样的事情有多难?
这是否合理?许多人告诉我,我可以在没有使用工具的情况下推断出我应该使用哪些模板实例...
答案 0 :(得分:1)
有几种方法可以解决这个问题。
如果您正在使用开源编译器,那么制作一个跟踪所有模板证据的simple change to the source code并不难。
如果这听起来太麻烦,您还可以尝试强制编译器在给定符号的每个模板实例化上生成警告。 Steven Watanabe写了set of tools,可以帮助你。
最后,可能最好的选择是使用编译器生成的调试符号(或映射文件)来跟踪每个函数在最终图像中出现的次数,更重要的是它增加了多少重量以字节为单位这种工具的最佳示例是Andrian Stone的SymbolSort,它基于Microsoft的工具集。另一个类似的工具是Map File Browser。