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

ответ

7

Если я правильно помню, это должно означать (более или менее), что функция gtk_moz_embed_new() выполняет 15.61% времени, когда приложение было запущено.

Вы видите, что эта функция возвращает встроенный вызов другим функциям (или классам или тому подобное), которые также требуют времени для выполнения. Когда все это делается, тогда функция gtk_moz_embed_new() acutally возвращает значение. По той же причине он принимает main() 99% времени для выполнения, это завершает выполнение после того, как весь включенный код в нем выполнен.

Обратите внимание, что self значения для gtk_moz_embed_new() является 0, который является «эксклюзивная стоимостью» означает, что функция это само действительно не приняли никакого времени для выполнения (это действительно только обратный звонок)

But to be exact:

1.1 В чем разница между "Incl." и «Я»?

Это атрибуты стоимости для функций, относящихся к определенному типу событий. Как функции могут звонить друг другу, имеет смысл отличить стоимость самой функции ('Self Cost') и , включая все вызванные функции ('Inclusive Cost'). 'Self' иногда также называют 'Эксклюзивные' расходы.

Так, например, для main(), вы всегда будете иметь , включая стоимость почти 100%, , тогда как сама стоимость не учитывается , когда настоящая работа выполняется в другой функции .

+0

Спасибо. Я добавил http://i44.tinypic.com/iz4936.png. Я нажал кнопку «gtk_moz_embed_new», которая равна 15.61 в стоимости «вкл.». Но на вкладке «вызов». функция g_object_new's Ir равна 15.60. Почему «g_object_new берет столько затрат? – hap497

+1

Ну, я не очень хорошо знаком с GTK, поэтому я не могу дать ответ на это, я думаю, что для создания нового объекта потребуется некоторое время. :) В основном cachegrind поможет вам найти узкие места, которые не исправляют их (по крайней мере, насколько я знаю) –