Профилятор gprof: Оценка `времени в подпрограммах' использует допущение

Вперед Назад Содержание

10. Оценка `времени в подпрограммах' использует допущение

Некоторые из цифр в графе вызовов--приблизительные, например, `время в подпрограммах' и все времена в строках вызывающих и вызываемых функций.

Нет непосредственной информации об этих измерениях в самих данных о профиле. Однако, `gprof' может попытаться оценить их, делая некоторые предположения о вашей программе, которые могут быть, а могут и не быть истинными.

Предположения (допущения) приводят к тому, что среднее время на каждый вызов какой-либо функции `foo' не соответствует времени, указанному для функции, которая ее вызвала. Если `foo' всего затратила 5 секунд и 2/5 вызовов `foo' были сделаны из функции `a', то для `foo' будет сделано предположение, что она потребовала 2 секунды `времени в подпрограммах' функции `a'.

Обычно это допущение в достаточной степени истинно, но для некоторых программ оно очень далеко от истины. Допустим, что `foo' возвращается очень быстро, если ее аргумент равен нулю; допустим также, что `a' всегда передает нуль в качестве аргумента, тогда как другие функции вызывают `foo' с другими значениями аргумента. В такой программе все время, затраченное на `foo', будет приходиться на другие функции. Но `gprof' не имеет возможности узнать об этом; он слепо и тупо укажет 2 секунды времени для `foo', вызываемой из `a'.

Мы надеемся, что несколько дней для получения более точных данных в `gmon.out' сделают это допущение более не нужным, если мы сможем этого добиться. И вообще, приблизительные цифры, как правило, более полезны, чем неверные.


Вперед Назад Содержание