Компиляция с -pg
инструментами вашего кода, так что gprof
сообщает подробную информацию, см. Руководство gprof, 9.1 Реализация профилирования
Профилирование работает, изменяя каждую функциюв вашей программе скомпилирована так, что когда она вызывается, она скрывает некоторую информацию о том, откуда она была вызвана.Исходя из этого, профилировщик может выяснить, какая функция вызвала его, и подсчитать, сколько раз она была вызвана.Это изменение вносится компилятором, когда ваша программа компилируется с опцией -pg
, которая заставляет каждую функцию вызывать mcount
(или _mcount
, или __mcount
, в зависимости от ОС и компилятора) в качестве одного из еепервые операции.
Подпрограмма mcount
, включенная в библиотеку профилирования, отвечает за запись в таблицу графа вызовов в памяти как своей родительской подпрограммы (child), так и родительской родительской.Обычно это делается путем проверки кадра стека, чтобы найти как адрес дочернего элемента, так и адрес возврата в исходном родительском элементе.Поскольку это очень машинно-зависимая операция, сама mcount
обычно представляет собой короткую процедуру-заглушку на ассемблере, которая извлекает необходимую информацию, а затем вызывает __mcount_internal
(обычная функция C) с двумя аргументами - frompc
и selfpc
.__mcount_internal
отвечает за ведение графа вызовов в памяти, в котором записываются frompc
, selfpc
и количество раз, которое была пройдена каждая из этих дуг вызова.
...
Обратите внимание, что с таким профилировщиком инструментов вы профилируете тот же код, который вы скомпилировали бы в выпуске без инструментов профилирования.С самим инструментарием кода связаны накладные расходы.Кроме того, код инструментария может изменить использование кэша инструкций и данных.
В отличие от профилировщика инструментов, профилировщик выборки, такой как Intel VTune , работает с неинструментированным кодом, глядя на счетчик программ целевой программы.через регулярные промежутки времени, используя прерывания операционной системы.Он также может запрашивать специальные регистры ЦП, чтобы дать вам еще больше информации о том, что происходит.
См. Также Профилировщики Инструментарий против сэмплирования