我们使用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和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
答案 0 :(得分:5)
g ++生成具有此名称的函数。它们调用静态对象的析构函数,并在调用构造函数时使用atexit()进行注册。
答案 1 :(得分:4)
__ tcf_0似乎确实是一个函数,它调用静态对象的析构函数,并为每个静态对象注册,在退出时调用(理所当然地认为this page上的内容)
现在,你的gprof的结果很奇怪,因为占用大部分时间的函数只需要0.04秒,这意味着整个程序需要0.1秒才能执行。如果我没弄错的话,我的猜测是你没有正确描述。您是否在启用了性能分析的情况下编译代码?