【问题标题】:template instantiation statistics from compilers来自编译器的模板实例化统计信息
【发布时间】:2014-12-07 05:28:44
【问题描述】:

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

如果我有一个大型代码库并且我想利用 C++11 extern 关键字,我想知道我的项目中最常用的模板(或来自 stl 的内部 - 比如 std::less<MyString>例如)。

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    如果您使用的是开源编译器,创建一个simple change to the source code 来跟踪所有模板实例并不难。

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

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

    【讨论】:

    猜你喜欢
    • 2015-04-04
    • 2017-06-19
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多