2

上下文:我正在执行此处描述的分析程序:方法

阻塞点是为正在观察的项目找到“最长的调用链”。什么工具可以用来找到这个?我想这将是一个静态分析工具。

否则,我认为可以为此目的使用调用图生成器。但是,如何推断最长的调用链呢?

4

1 回答 1

1

就跳数而言,“最长”的调用链可以直接从调用图中确定。这假设您已经获得了一个,是的,这通常需要静态分析。(您可以获得动态生成的调用图,但它可能不会显示所有可能的调用)。为 firefox 购买一个,使用跨越语言边界的函数调用,如果你想考虑这些,可能会非常具有挑战性。

给定这样的调用图:从调用图开始,每个节点的调用路径长度值为空白。使用 call-path-length 值 0 标记根 [您的调用图可能是 DAG]。对于每个未标记的孩子,所有父母都已确定,用父母的最大值标记该孩子,加 1. 重复直到所有孩子都被贴上标签。[如果你在调用图中有一个循环,你必须决定忽略它,或者把它当作路径长度的一些常数。] 最长的路径很容易通过从最高值节点开始,然后向后走来提取到最昂贵的父母,直到找到根源。

[编辑]如果您将叶值反向传播给父母,您最终可以得到每个节点标记为它到达多远的图形。

你确定你想要最长的链吗?或者您想要最坏情况的执行时间?

于 2013-05-31T16:48:01.833 回答