Будет ли время, подсчитываемое в 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-минутная демонстрация видео.

Другие вопросы по тегам