2010-05-09 107 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