<html lang="en"> <head> <title>Assumptions - GNU gprof</title> <meta http-equiv="Content-Type" content="text/html"> <meta name="description" content="GNU gprof"> <meta name="generator" content="makeinfo 4.7"> <link title="Top" rel="start" href="index.html#Top"> <link rel="up" href="Inaccuracy.html#Inaccuracy" title="Inaccuracy"> <link rel="prev" href="Sampling-Error.html#Sampling-Error" title="Sampling Error"> <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> <!-- This file documents the gprof profiler of the GNU system. Copyright (C) 1988, 92, 97, 98, 99, 2000, 2001, 2003, 2007 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. man end--> <meta http-equiv="Content-Style-Type" content="text/css"> <style type="text/css"><!-- pre.display { font-family:inherit } pre.format { font-family:inherit } pre.smalldisplay { font-family:inherit; font-size:smaller } pre.smallformat { font-family:inherit; font-size:smaller } pre.smallexample { font-size:smaller } pre.smalllisp { font-size:smaller } span.sc { font-variant:small-caps } span.roman { font-family: serif; font-weight: normal; } --></style> </head> <body> <div class="node"> <p> <a name="Assumptions"></a>Previous: <a rel="previous" accesskey="p" href="Sampling-Error.html#Sampling-Error">Sampling Error</a>, Up: <a rel="up" accesskey="u" href="Inaccuracy.html#Inaccuracy">Inaccuracy</a> <hr><br> </div> <h3 class="section">6.2 Estimating <code>children</code> Times</h3> <p>Some of the figures in the call graph are estimates—for example, the <code>children</code> time values and all the time figures in caller and subroutine lines. <p>There is no direct information about these measurements in the profile data itself. Instead, <code>gprof</code> estimates them by making an assumption about your program that might or might not be true. <p>The assumption made is that the average time spent in each call to any function <code>foo</code> is not correlated with who called <code>foo</code>. If <code>foo</code> used 5 seconds in all, and 2/5 of the calls to <code>foo</code> came from <code>a</code>, then <code>foo</code> contributes 2 seconds to <code>a</code>'s <code>children</code> time, by assumption. <p>This assumption is usually true enough, but for some programs it is far from true. Suppose that <code>foo</code> returns very quickly when its argument is zero; suppose that <code>a</code> always passes zero as an argument, while other callers of <code>foo</code> pass other arguments. In this program, all the time spent in <code>foo</code> is in the calls from callers other than <code>a</code>. But <code>gprof</code> has no way of knowing this; it will blindly and incorrectly charge 2 seconds of time in <code>foo</code> to the children of <code>a</code>. <!-- FIXME - has this been fixed? --> <p>We hope some day to put more complete data into <span class="file">gmon.out</span>, so that this assumption is no longer needed, if we can figure out how. For the novice, the estimated figures are usually more useful than misleading. </body></html>