Профилирование gprof

Помогите разобраться. Куча мануалов по gprof - но они не понятные. Вот на примере

Профилирование приложений в Qt Creator с помощью gprof

начинаются непонятки с этого

   Flat profile: 
   Each sample counts as 0.01 seconds. 
   %    cumulative   self           self    total  
  time   seconds   seconds  calls  ms/call  ms/call    name   
 75.08    7.35       7.35   1500    4.90     4.90    functionB()
 24.92    9.79       2.44   1500    1.63     1.63    functionA()

что такое self ms/call и total ms/call? Есть описание

self ms/call' (`собственных миллисекунд на вызов')

Это поле представляет собой среднее количество миллисекунд, затраченных этой функцией на вызов, если эта функция профилируется. Иначе это поле остается пустым для этой функции.

total ms/call' (всего миллисекунд на вызов')

Это поле представляет собой среднее количество миллисекунд, затраченных этой функцией и ее подпрограммами на вызов, если эта функция профилируется. Иначе это поле остается пустым для этой функции.

что такое `собственных миллисекунд на вызов'? Например для functionB() - Это время затраченное на вход/выход в/из функции functionB() (т.е. на переключение контекста из main в functionB и обратно)?


Ответы (1 шт):

Автор решения: Fat-Zer

что такое `собственных миллисекунд на вызов'? Например для functionB() - Это время затраченное на вход/выход в/из функции functionB() (т.е. на переключение контекста из main в functionB и обратно)?

Нет.
self и total — это название столбцов. т.е., соответственно, собственное время и общее время.
ms/call — это единицы измерения т.е. миллисикунды/вызов.

т.о. значение в столбце total — это среднее время выполнения в миллисекундах самой функции включая время выполнения всех других подпрограмм, которые она вызывает. А selfне включая время подпрограмм. Как не сложно видеть, значение в поле self ms/call равно общему количеству секунд, затраченному при всех вызовах, (self seconds), поделённому на общее количество вызовов (calls) и умноженное на 1000.

→ Ссылка