控制流程图和调用(流程?)图之间的实际差异?

时间:2012-03-27 11:58:15

标签: static-analysis control-flow call-flow

维基百科有control flow graph的定义。我还听到过引用'call(flow?)graph'的术语,但找不到任何相关的资源。这两者之间有什么关系?

2 个答案:

答案 0 :(得分:22)

Wikipedia将call graph定义为程序中子程序之间调用关系的表示。在调用图中,两个节点fg之间的边:

      f --> g

表示子例程f调用子例程g的事实。调用图提供了程序的程序间视图。

控制流程图(CFG)为整个程序的结构以及特别是子程序提供了更精细的“细节”。例如,子例程f的CFG将明确条件分支引起的所有路径:

                             / branch1 \
    begin --> condition -->             --> codeblock --> g --> end
                             \ branch2 /

这种CFG用于构建子程序的程序内视图。

答案 1 :(得分:6)

调用图(CG)控制流图(CFG)由节点和边组成。 CG 是过程间的,节点表示子例程(方法,函数等),而边沿表示两个子例程之间的调用者关系(例如,A-> B,“ A”是调用者子例程) ,而“ B”是被调用的子例程)。 CFG 是过程内的,节点表示程序语句,包括被调用的子例程以及条件语句,而边沿表示程序的流程。当 CG CFG 组合在一起时,它称为过程间控制流程图(ICFG) CFG 的生成比 CG 更为资源密集,但更为详尽。