2010-05-09 7 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()이 값을 반환합니다. main() 실행 시간의 99 %가 걸리는 동일한 이유 때문에, 포함 된 모든 코드가 실행 된 후에 실행이 완료됩니다.

gtk_moz_embed_new()에 대한 self 값은 정말 (이 반환 전화 정말로 단지입니다)

But to be exact:

실행하는 모든 시간이 걸렸하지 않았다 기능 그것 자체를 의미하는 "독점 비용이"0

하는 것으로

1.1 '포함'과 다른 점은 무엇입니까? 과 '자기'?

일부 이벤트 유형에 관한 함수의 비용 특성입니다. 기능이 서로 호출 할 수 있으므로 은 함수의 비용 ('자체 비용')과 의 비용을 모두 함수 ('포괄적 비용')라고 불리는 비용을 구별하는 데 의미가 있습니다. '자체' 을 ' '독점 요금이라고도합니다.

예. main()의 경우 은 실질적으로 다른 함수에서 수행 될 때 인 경우 자기 비용은 무시할 수 있지만 거의 100 %의 포괄적 인 비용 인 을 갖습니다.

+0

감사합니다. http://i44.tinypic.com/iz4936.png을 추가했습니다. 나는 'incl'비용에서 15.61 인 'gtk_moz_embed_new'를 클릭했다. 하지만 '수신자'탭에 있습니다. 함수 g_object_new의 Ir는 15.60입니다. 왜 'g_object_new'가 많은 비용을 들이고 있습니까? – hap497

+1

글쎄, GTK에 익숙하지 않아 답변을 드릴 수 없으므로 새로운 추측을하기 위해서는 새로운 객체를 만드는 데 시간이 걸릴 것입니다. :) 기본적으로 cachegrind 당신이 그들을 해결하지 병목 현상을 (적어도 내가 아는 한) 찾을 수 있습니다. –

관련 문제