我们使用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
解决方法:
__tcf_0似乎确实是一个函数,该函数调用静态对象的析构函数并为每个静态对象注册,并在退出时调用(将this page上的内容视为理所当然)
现在,您的gprof的结果非常奇怪,因为花费大部分时间的函数仅花费0.04秒,这意味着整个程序需要0.1 s的时间来执行.如果我没记错的话,我的猜测是您的个人资料配置不正确.您是否启用了性能分析功能来编译代码?