根据我的说法,我运行gprof
了一个C++程序,我得到了第一行输出:16.637s
time()
% cumulative self self total time seconds seconds calls s/call s/call name 31.07 0.32 0.32 5498021 0.00 0.00 [whatever]
为什么31.07%
它只花了.32
几秒钟的时间列表?这是一次通话时间吗?(这不是自我/电话吗?)
这是我第一次使用gprof
,所以请善待:)
编辑:通过向下滚动,似乎gprof认为我的程序需要1.03秒.为什么会这么错呢?
瓶颈原来是在文件I/O中(参见Is std :: ifstream明显比FILE慢?).我切换到在缓冲区中读取整个文件,它加速了很多.
这里的问题是gprof在等待文件I/O时似乎没有生成准确的分析(请参阅http://www.regatta.cs.msu.su/doc/usr/share/man/info/ru_RU/a_doc_lib /cmds/aixcmds2/gprof.htm).事实上,seekg
并tellg
没有连谱名单上,他们是瓶颈!
自我秒是在[无论如何]花费的时间.
累积秒数是[无论]花费的时间和它上面的调用(例如[whatever] + main)
这些都不包括在[what]调用的函数中花费的时间. 这就是为什么你没有看到更多的时间列出.
例如,如果你的[what]函数调用了很多printf,那么你的gprof输出告诉你printf大部分都在吃.