gpt4 book ai didi

computer-science - 程序的控制流程图

转载 作者:行者123 更新时间:2023-12-04 20:21:54 26 4
gpt4 key购买 nike

我现在正在学习一个编译器类,我们正处于必须构建一个 CFG 以实现优化的地步。我不知道的一件事是一个程序有多少个 CFG?我见过的每个示例似乎都是一个简单代码段的 CGF。因此,如果您有一个具有三个功能的程序。您是否为每个功能有一个单独的 CFG,或者整个程序是否有一个大的 CFG?

最佳答案

每个功能的 CFG 由调用点连接。如果一个函数调用另一个函数,例如:

0  void foo() { /* do stuff */ }
1 void bar() { /* do stuff */ }
2
3 void baz() {
4 foo(); // Callsite for foo. Control transfers to foo, then foo returns here.
5 bar(); // Callsite for bar. Control transfers to bar, then bar returns here.
6 }

然后是 baz 的控制图将包含一条通往 foo 图表的边.同样,因为 foo最终将返回 baz (以及从其他地方调用它的地方),从 foo 的末尾开始会有一条边。的图表返回到调用 foo 后的语句在 baz .在这里,下一条语句是对 bar 的调用。在第 5 行。此时, bar 有一条边调用 bar的 CFG,以及 bar 中退出点的行回到 baz 结尾.

基本上你需要考虑的就是“接下来执行什么代码”。这告诉你边应该在你的控制图中去哪里。函数调用将控制权转移到函数返回,这意味着从调用点到函数 CFG 并再次返回。

请注意,并非所有完整程序 CFG 都是连通图。如果有 unreachable code在您正在分析的程序中,这将是完整 CFG 中它自己的未连接部分。例如如果您调用 bar在上面的例子中,然后 bar将有自己的图表放在一边,而 bazfoo将由边缘连接。

关于computer-science - 程序的控制流程图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5586775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com