【问题标题】:Need help in understanding kcachedgrind output在理解 kcachedgrind 输出方面需要帮助
【发布时间】:2011-02-17 10:41:22
【问题描述】:

我正在使用 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。

谢谢。

【问题讨论】:

  • g_object_new 需要时间来分配内存!

标签: valgrind kcachegrind


【解决方案1】:

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

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

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

But to be exact:

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

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

例如对于 main(),你将永远 具有几乎 100% 的包容性成本, 而自我成本可以忽略不计 当真正的工作在另一个人完成时 功能。

【讨论】:

  • 谢谢。我添加了i44.tinypic.com/iz4936.png。我点击了 'gtk_moz_embed_new',它是 15.61 in 'incl' cost。但是在“被调用者”选项卡中。函数 g_object_new 的 Ir 为 15.60。为什么 'g_object_new 花费这么多?
  • 好吧,我对 GTK 不是很熟悉,所以我无法提供答案,我最好的猜测是创建一个新对象需要一些时间。 :) 基本上,cachegrind 将帮助您找到无法修复它们的瓶颈(至少据我所知)
猜你喜欢
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多