我现在有一个项目,我想要进行性能分析,但它使用了另一个我无法控制的库。说是否有这样的功能:
#include <library.h>
void function(...)
{
// do something
for (...)
{
// ...
library_function(...);
// ...
}
// do something
}
我们假设library_function来自另一个静态库,该库未使用启用的分析编译。现在,如果gprof告诉我运行function
需要花费10个孩子,包括其所有孩子,这是否包括在library_function
中花费的时间?
答案 0 :(得分:2)
不,因为gprof
的工作方式,它会对程序计数器进行采样,找出程序计数器所处的功能,并增加该功能的自我时间。
此外,它计算任何函数A调用任何函数B的次数。
由此,它试图找出其他所有内容。
当然,这只适用于它所知道的功能。
这很聪明,但是you can do better。
补充:由于有人明智地决定删除上述帖子,这里简要总结一下如何做得更好:
Try this instead.
Here's an example of a 44x speedup.
Here's a 730x speedup.
Here's an explanation of the statistics.
Here's an answer to critiques.
Here's an 8-minute video demonstration.