Sun Studio 12:性能分析器

递归如何影响函数级度量

递归函数直接或间接的调用使得度量的计算复杂化。性能分析器将函数的度量作为一个整体显示,而不是显示函数的每个调用的度量:因此,必须将一系列递归调用的度量压缩为单一度量。这不会影响通过调用栈底部的函数(叶函数)计算得出的独占度量,但会影响包含度量和归属度量。

包含度量是通过将事件的度量添加到调用栈中函数的包含度量来计算的。为了确保在递归调用栈中不重复计算度量,事件的度量仅会添加到每个唯一函数的包含度量。

归属度量是通过包含度量计算得出的。在最简单的递归中,递归函数具有两个调用者:它本身和另一个函数(初始化函数)。如果在最后的调用中完成了所有工作,则会将递归函数的包含度量归属到它本身,而不是初始化函数。之所以发生此归属,是因为递归函数的所有更高调用的包含度量均被视为零,以避免重复计算度量。但是,初始化函数会由于递归调用而做为被调用者正确归属到递归函数的包含度量部分。