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

然后,此函数似乎调用了我的大多数用户函数(即,它是从 main 调用的函数)。我为此找到的最接近的解释是here,但该链接指的是静态对象和atexit,我认为这不适用于我的情况。

如果有帮助,我正在使用 Boost (program_options and 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
4

2 回答 2

6

__tcf_0 似乎确实是一个函数,它调用静态对象的析构函数并为每个静态对象注册,在退出时调用(理所当然地认为这个页面上所说的)

现在,你的 gprof 的结果很奇怪,因为大部分时间的函数只需要 0.04 秒,这意味着整个程序需要 0.1 秒来执行。如果我没记错的话,我的猜测是您没有正确配置文件。您是否在启用分析的情况下编译了代码?

于 2009-08-04T12:38:36.817 回答
6

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

于 2009-08-04T12:39:37.267 回答