2010-05-09 102 views
3

我正在使用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()。需要帮助理解kcachedgrind输出

GtkWidget * 
gtk_moz_embed_new(void) 
{ 
    return GTK_WIDGET(g_object_new(GTK_TYPE_MOZ_EMBED, NULL)); 
} 

您能否帮助理解结果或如何使用kcachedgrind。

谢谢。

+0

g_object_new需要时间来分配内存! – Doomsday 2010-07-22 08:56:42

回答

7

如果我没有记错,那应该意味着(或多或少)该函数gtk_moz_embed_new()正在执行应用程序运行时间的15.61%。

您会发现,该函数返回对其他函数(或类或其他函数)的内联调用,这些函数也需要时间来执行。当它们全部完成时,功能gtk_moz_embed_new()会实际返回一个值。执行99%的时间需要执行main()的原因非常相似,它会在所有包含的代码都执行完毕后执行。

注意,对于gtk_moz_embed_new()self值是0,这是“独家成本”,这意味着功能它自身并没有真正花任何时间来执行(这真的只是一个回呼)

But to be exact:

1.1'Incl。'有什么区别?和'自我'?

这些是关于某些事件类型的 函数的成本属性。 由于功能可以互相呼叫,所以 有意义地区分功能本身('自身成本')和包括所有被称为 功能('包含成本')的成本 。 '自我' 有时也被称为 '独占'成本。

因此,例如,对于main(),您总是会有 几乎100%的包容性成本,而 而自己的成本是可忽略的 当真正的工作是在另一个 函数完成。

+0

谢谢。我添加了http://i44.tinypic.com/iz4936.png。我点击了'gtk_moz_embed_new',这是'incl'成本中的15.61。但在“被调用者”选项卡中。函数g_object_new的Ir是15.60。为什么'g_object_new需要花费很多成本? – hap497 2010-05-09 22:11:23

+1

嗯,我对GTK不是很熟悉,所以我不能提供答案,我最好猜测它需要一些时间来创建一个新的对象。 :)基本上cachegrind将帮助你找到瓶颈不解决它们(至少据我所知) – 2010-05-09 23:10:47