控制流图和调用图之间的实际区别是什么?

12

维基百科有一个关于控制流图的定义。我也听到过称为“调用(流?)图”的术语,但找不到相关资源。两者之间的关系是什么?

控制流图和调用(流?)图是两个不同的概念。控制流图描述了程序中控制流程的路径,而调用(流?)图描述了程序中函数之间的调用关系。它们都是在软件工程中用于分析和优化代码的工具。因此可以说,调用(流?)图是控制流图的一种特殊类型,用于描述程序中函数之间的控制流程。

1
我不认为“呼叫流程图”是一个标准术语。你在哪里看到这个词的? - Ira Baxter
我认为OP的意思是“调用图”。 - Jus12
2个回答

33

维基百科定义了 调用图(call graph) 为程序中子例程间的调用关系表示。在调用图中,两个节点 fg 之间的边:

      f --> g

表示子程序 f 调用了子程序 g。调用图提供了一个关于程序的 跨过程 视图。

控制流图 (CFG) 提供了有关程序整体结构以及特定子程序的更精细的 "细节"。例如,子程序 f 的 CFG 将明确说明由条件分支引起的所有路径:

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

这种CFG用于构建一个子例程的程序内部视图。


2
+1,顺便说一句,我不会将维基百科上的定义作为权威参考。 - Jus12

9

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接