令人困惑的gprof输出

Jes*_*der 4 c++ optimization profiling gprof

根据我的说法,我运行gprof了一个C++程序,我得到了第一行输出:16.637stime()

%   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]
Run Code Online (Sandbox Code Playgroud)

为什么31.07%它只花了.32几秒钟的时间列表?这是一次通话时间吗?(这不是自我/电话吗?)

这是我第一次使用gprof,所以请善待:)

编辑:通过向下滚动,似乎gprof认为我的程序需要1.03秒.为什么会这么错呢?

Jes*_*der 8

瓶颈原来是在文件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).事实上,seekgtellg没有连谱名单上,他们是瓶颈!


Dre*_*ann 6

自我秒是在[无论如何]花费的时间.

累积秒数是[无论]花费的时间和它上面的调用(例如[whatever] + main)

这些都不包括在[what]调用的函数中花费的时间. 这就是为什么你没有看到更多的时间列出.

例如,如果你的[what]函数调用了很多printf,那么你的gprof输出告诉你printf大部分都在吃.