Многое говорит о вашей программе?За исключением бизнеса vector<bool>
, он практически ничего не говорит.
Вы видите из первых рук проблемы с gprof .
Предположим,Вы знаете, что у некоторой функции "высокое время", что означает, что счетчик программы отбирал много раз, но это не та функция, которую вы написали или можете изменить.
Единственное, что вы можете с этим сделатьпопробуйте вызвать его меньше, или попытаться вызвать меньше подпрограммы, которая его вызывает, или попытаться вызвать эту подпрограмму меньше, и вы остаетесь пытаться угадать, где это находится.
gprof пытается помочь вам, также угадывая, что такое время включительно для подпрограммы, сколько раз она вызывается и график вызовов.Если нет рекурсии, и у вас есть только дюжина или около того функций, и вы не выполняете никаких операций ввода-вывода, это может быть полезно.
Существует немного другой подход, воплощенный в профилировщиках, таких как Увеличить .Вместо выборки только счетчика программы, выборка всего стека вызовов.Зачем?Поскольку строки кода, ответственные за потраченное время, находятся в стеке в течение этого времени , просто просят, чтобы их заметили.
Профилировщики, которые производят выборку стека вызовов, времени настенных часов исказать, какие строки кода находятся в стеке большую часть времени, являются наиболее эффективными.Еще более эффективно, если вы можете просматривать отдельные образцы стека, потому что это также говорит вам, почему эти строки вызываются, а не просто как их количество, поэтому легко определить, действительно ли они вам нужны.