我正在使用valgrind callgrind来分析gtk上的程序。然后我使用kcachedgrind来读取结果。我在这里获取了kcachedgrind的更新截图:http://i41.tinypic.com/168spk0.jpg。它说函数gtk_moz_embed_new()花费了'15 .61%'。 但我不明白这是怎么可能的。函数gtk_moz_embed_new()字面上有1行:它只是调用g_object_new()。
GtkWidget *
gtk_moz_embed_new(void)
{
return GTK_WIDGET(g_object_new(GTK_TYPE_MOZ_EMBED, NULL));
}
请帮助理解结果或如何使用kcachedgrind。
谢谢。
答案 0 :(得分:8)
如果我没记错的话,那应该意味着(或多或少)函数gtk_moz_embed_new()
执行应用程序运行时间的15.61%。
您会看到,该函数返回对其他函数(或类或其他)的内联调用,这些函数也需要一些时间来执行。当它们全部完成时,函数gtk_moz_embed_new()
实际上返回一个值。同样的原因,main()
99%的时间执行,它执行完所有包含的代码后执行完成。
请注意self
的{{1}}值为0,这是“独占成本”,这意味着它自己的函数并没有真正花费任何时间来执行(它实际上只是一个回调)
1.1'Incl。'有什么区别?和'自我'?
这些是费用属性 关于某些事件类型的函数。 因为函数可以相互调用它 有意义区分成本 功能本身('自我成本')和 包括所有被叫的费用 功能('包容性成本')。 '自' 有时也被称为 '独家'成本。
所以,例如对于main(),你将永远 包含成本几乎100%, 而自我成本是可以忽略的 当真正的工作在另一个人完成时 功能