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

Ric*_*den 8 c++ g++ gprof

我们使用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
Run Code Online (Sandbox Code Playgroud)

然后,此函数似乎调用了我的大多数用户函数(即,它是从main调用的函数).我在这里找到的最接近的解释是在这里,但该链接指的是静态对象和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
Run Code Online (Sandbox Code Playgroud)

APr*_*mer 6

g ++生成具有此名称的函数.它们调用静态对象的析构函数,并在调用构造函数时使用atexit()进行注册.


Cyr*_* Ka 5

__tcf_0似乎确实是一个函数,该函数调用静态对象的析构函数并为每个静态对象注册,并在退出时调用(将本页上的内容视为理所当然)

现在,您的gprof的结果非常奇怪,因为花费大部分时间的函数仅花费0.04秒,这意味着整个程序需要0.1 s的时间来执行。如果我没记错的话,我的猜测是您的个人资料配置不正确。您是否启用了性能分析功能来编译代码?