维基百科有control flow graph的定义。我还听到过引用'call(flow?)graph'的术语,但找不到任何相关的资源。这两者之间有什么关系?
答案 0 :(得分:22)
Wikipedia将call graph定义为程序中子程序之间调用关系的表示。在调用图中,两个节点f
和g
之间的边:
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 更为资源密集,但更为详尽。