Система Turbo Profiler фирмы Borland | страница 28




На следующем этапе выполнения main вызывает функцию route66 и Вы попадаете на новый участок дороги. В момент перехода через маркер (пункт сбора пошлины), которым отмечена функция route66, происходит несколько вещей:


* Текущей «областью» начинает считаться route66;


* Отправляются в стек переменные, в которых накапливаются данные для вызывающей функции (в данном случае — функции main);


* Переменная, в которой подсчитывается количество вызовов route66, увеличивается на единицу.


Каждый импульс таймера, происходящий начиная с данного момента до возврата из route66, автоматически увеличивает значение переменной, в которой накапливается время выполнения функции route66. При этом переменная, в которой происходит учет общего времени выполнения программы, также продолжает увеличиваться с каждым импульсом таймера.


Как только в процессе выполнения достигается точка возврата из route66, профилировщик достает из стека переменные в которых накапливается статистика для функции вызвавшей данную.


Переменная, накапливающая количество обращений к вызывающей функции в этот момент не изменяется. Тем не менее, каждый импульс таймера, происходящий с этого момента до вызова highway80 добавляется, как к переменной, в которой накапливается время работы функции main, так и к переменной, в которой накапливается время выполнения всей программы. Для того, чтобы проверить этот факт, попробуйте убрать маркер «области», отмечающий route66 и затем сравнить данные, которые получаются в после этого, c профилем для случая, когда маркер установлен. Вы должны заметить, что общее время выполнения осталось тем же. Время же выполнения main должно увеличиться как раз на столько, сколько раньше требовалось для выполнения route 66.


Определение затрат времени на вызов подпрограмм.


У вас может возникнуть желание измерить время, которое тратится непосредственно на вызов подпрограммы (например подпрограммы route66), без учета времени работы самой подпрограммы. В нашем случае самым простым способом сделать это является прекращение сбора статистических данных во входной точке route66, и возобновление сбора этих данных сразу же после возврата из route66.

(Также вы можете получить информацию такого рода при работе профилировщика в пассивном режиме анализа, обсуждаемом в Главе 3). А теперь, поместите курсор на первую строку route66, затем выберите команду Operation (Работа) в локальном меню окна Module (Модуль), для того, чтобы открыть блок диалога Area Options (Параметры «области»), установите Operation (Работа) в состояние Disable (Отключить), нажмите клавишу Enter.