我正在探索 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 的输出,但这不是我想要得到的。更多的是关于执行时间和编译不同部分的百分比,它与具体的翻译单元有关。
也许我可以使用其他一些工具来获取此类信息?
您可以简单地尝试计算实例化数量,如下所示:
size_t counter = 0;
template <typename T>
void foo()
{
static size_t c = ++counter; // static -> only initialised once!
static_cast<void>(c);
}
理想情况下,编译器会完全优化
c
,但不允许在递增计数器时这样做(除非您根本不在任何地方使用该计数器......)。
godbolt演示。