什么是函数__tcf_0?(在使用gprof和g++时看到)

9
我们使用的是 g++ 4.2.4,我正在尝试追踪代码中的性能问题。为了生成分析报告,我运行了 gprof,但发现最耗时的函数是 __tcf_0,这让我感到困惑。
Each sample counts as 0.01 seconds.
 %   cumulative   self              self     total           
time   seconds   seconds    calls  ms/call  ms/call  name    
40.00      0.04     0.04        1    40.00    95.00  __tcf_0

这个函数似乎调用了我大部分的用户函数(即从主函数中调用它)。我找到的最接近的解释在这里,但是该链接涉及静态对象和atexit,我不认为这适用于我的情况。
如果有帮助的话,我正在使用Boost(program_options和fusion)和HDF5库。
更新:
我构建时使用的命令是:
g++  -Wreturn-type -Wunused -Winline -pg  -DLINUX -DHAS_SETENV \
    -DFUSION_MAX_MAP_SIZE=15 -DFUSION_MAX_VECTOR_SIZE=15  -g -O0 \
    --param large-function-growth=300 --param inline-unit-growth=200
2个回答

6

__tcf_0看起来确实是一个函数,它调用静态对象的析构函数,并为每个静态对象注册,以在退出时调用(假设在此页面所说的内容是正确的)。

现在,您的gprof结果非常奇怪,因为花费大部分时间的函数只需要0.04秒,这意味着整个程序执行需要0.1秒。如果我没有猜错,我的猜测是您没有正确地进行剖析。您是否启用了编译代码的剖析功能?


我已经在问题中添加了我们使用的构建命令。我们有一个非常灵活的构建系统,这是使用我过去成功使用过的特殊“gprof”制作配置。因此原则上,我认为我拥有所有所需的设置。 - Richard Corden
两个答案都基本正确 - 但是声望对你可能更有用。 - Richard Corden

6

g++生成的函数名为此。它们调用静态对象的析构函数,并在构造函数被调用时通过atexit()进行注册。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接