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()。

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

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

谢谢你。

4

1 回答 1

8

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

您会看到,该函数返回对也需要时间执行的其他函数(或类或其他)的内联调用。当它们都完成后,函数就会gtk_moz_embed_new()返回一个值。同样的原因,它需要main()99% 的时间来执行,它会在执行完所有包含的代码后完成执行。

请注意,该self值为gtk_moz_embed_new()0,即“独占成本”,这意味着它本身并没有真正花费任何时间来执行(它实际上只是一个返回调用)

但准确地说:

1.1 'Incl.' 和有什么区别 和“自我”?

这些是有关某些事件类型的功能的成本属性。由于函数可以相互调用,因此区分函数本身的成本(“自身成本”)和包括所有被调用函数的成本(“包含成本”)是有意义的。“自费”有时也称为“独家”费用。

因此,例如对于 main(),您将始终拥有几乎 100% 的包含成本,而当实际工作在另一个函数中完成时,自身成本可以忽略不计。

于 2010-05-09T20:31:43.983 回答