🚀 优质资源分享 🚀
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
💛Python量化交易实战💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
本章是系列文章的第三章,介绍了基于数据流分析的一些优化方法。包括生命周期管理,可获得表达式,常用表达式,可达性定义。本章在介绍这4中分析方法的基础上提取出它们的通用模式。这一章形式化的内容比较多,看的时候有点烧脑,最好自己手工推导一下,要不然基本上看不懂:)
本文中的所有内容来自学习DCC888的学习笔记或者自己理解的整理,如需转载请注明出处。周荣华@燧原科技
3.1 生命周期
对下面的程序:
1 var x,y,z;
2 x = input;
3 while (x > 1) {
4 y = x / 2;
5 if (y > 3)
6 x = x - y;
7 z = x - 4;
8 if (z > 0)
9 x = x / 2;
10 z = z - 1;
11 }
12 output x;
可以生成控制流图如下:
图对应dot文件内容:
1 digraph "CFG for 3.1"{
2 rankdir=LR
3 "var x,y,z" -> "x = input" -> "x > 1" -> {"output x" "y = x / 2"}
4 "y = x / 2" -> "y > 3" -> {"x = x - y" "z = x - 4"}
5 "x = x - y" -> "z = x - 4" -> "z > 0" -> {"x = x / 2" "z = z - 1"}
6 "x = x / 2" -> "z = z - 1" -> "x > 1"
但仅有控制流分析,还有很多问题无法解决。第一个问题是计算机需要知道这个程序需要多少寄存器,甚至需要控制流执行到某条边的时候,需要多少个