Next: Incompatibilities Prev: Sampling Error Up: Top

Estimating `children' Times Uses an Assumption

   Some of the figures in the call graph are estimates--for example, the
`children' time values and all the the time figures in caller and
subroutine lines.

   There is no direct information about these measurements in the
profile data itself.  Instead, `gprof' estimates them by making an
assumption about your program that might or might not be true.

   The assumption made is that the average time spent in each call to
any function `foo' is not correlated with who called `foo'.  If `foo'
used 5 seconds in all, and 2/5 of the calls to `foo' came from `a',
then `foo' contributes 2 seconds to `a''s `children' time, by

   This assumption is usually true enough, but for some programs it is
far from true.  Suppose that `foo' returns very quickly when its
argument is zero; suppose that `a' always passes zero as an argument,
while other callers of `foo' pass other arguments.  In this program,
all the time spent in `foo' is in the calls from callers other than `a'.
But `gprof' has no way of knowing this; it will blindly and incorrectly
charge 2 seconds of time in `foo' to the children of `a'.

   We hope some day to put more complete data into `gmon.out', so that
this assumption is no longer needed, if we can figure out how.  For the
nonce, the estimated figures are usually more useful than misleading.

automatically generated by info2www