如何在 Linux 上的 clang 中获取模板实例化统计信息?

问题描述 投票:0回答:1

我正在探索 C++ 中模板的不同方面,并想更深入地探讨这个主题。

例如,我在某个头文件中有一个非常简单的函数模板:

template<typename T>
void foo(T value)
{
    (void)value;
}

我想统计在构建一些代码期间实例化了多少时间。 好吧,也许获得这种统计数据会很复杂。构建某些代码期间模板实例化的总量(10 次、20 次等)目前就足够了。

例如,我有以下文件:

a.h
a.cpp
b.h
b.cpp
c.h
c.cpp
main.cpp
CMakeLists.txt
。 我完成了构建过程并想要获得统计数据。

我尝试分析使用 -ftime-report 选项执行 clang build 的输出,但这不是我想要得到的。更多的是关于执行时间和编译不同部分的百分比,它与具体的翻译单元有关。

也许我可以使用其他一些工具来获取此类信息?

c++ linux clang clang++
1个回答
0
投票

您可以简单地尝试计算实例化数量,如下所示:

size_t counter = 0;
template <typename T>
void foo()
{
   static size_t c = ++counter; // static -> only initialised once!
   static_cast<void>(c);
}

理想情况下,编译器会完全优化

c
,但不允许在递增计数器时这样做(除非您根本不在任何地方使用该计数器......)。

godbolt演示。

© www.soinside.com 2019 - 2024. All rights reserved.