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