Будет ли время, подсчитываемое в gprof, включать в себя то, что тратится на функции, которые не профилируются?
Теперь у меня есть проект, по которому я хочу выполнить профилирование, но он использует другую библиотеку, которую я не контролирую. Скажи, если есть такая функция:
#include <library.h>
void function(...)
{
// do something
for (...)
{
// ...
library_function(...);
// ...
}
// do something
}
Давайте предположим, что library_function из другой статической библиотеки, которая не скомпилирована с включенным профилированием. Теперь, если gprof говорит мне, что работает function
взял 10 секунд, включая всех своих детей, будет ли это включать время, проведенное в library_function
?
1 ответ
Нет, потому что путь gprof
работает, он выбирает счетчик программы, выясняет, в какой функции находится счетчик программы, и увеличивает собственное время для этой функции.
Кроме того, он подсчитывает, сколько раз любая функция A вызывает любую функцию B.
Из этого он пытается выяснить все остальное.
Конечно, это работает только для функций, о которых он знает.
Это очень умно, но вы можете сделать лучше.
ДОБАВЛЕНО: так как кто-то в своей мудрости решил удалить вышеупомянутый пост, вот краткое резюме того, как вы можете сделать лучше:
Попробуйте это вместо этого.
Вот пример ускорения в 44 раза.
Вот ускорение в 730 раз.
Вот объяснение статистики.
Вот ответ на критику.
Вот 8-минутная демонстрация видео.