总结:编译原理--第十二章 过程间分析

第十二章  过程间分析

本章讨论了一些不能使用过程内分析技术解决的优化问题,由此引出了过程间分析的重要性。

  • 过程间分析:对跨越过程边界的信息进行跟踪的数据流分析称为过程间分析。
  • 调用点:程序中调用其他过程的程序点称为调用点。
  • 调用图:一个程序的调用图是一个二分图,图的结点分为对应于调用点的结点和对应于过程的结点。
  • 内联:只要一个程序中没有递归,原则上我们可以把所有的过程调用替换为过程代码的拷贝,并对得到的程序使用过程内分析技术。从效果上看,这个分析是过程间分析。
  • 控制流相关性和上下文相关性:如果一个数据流分析得到的事实和程序中的位置相关,那么它就是控制流相关的。
  • 基于克隆的上下文相关分析:从原则上讲,一旦我们建立了过程调用的不同上下文,就可以想象对于每个上下文都有一个该过程的克隆。
  • 基于摘要的上下文相关分析:另一个过程间分析的方法,扩展原来为过程内分析而设计的基于区域的分析技术。
  • 过程间分析技术的应用:需要过程间分析技术的重要应用之一是检测软件的安全漏洞。
  • Datalog:Datalog 语言是 if-then 规则的简单表示方式,它可以用于在高层次上描述数据流分析。
  • Datalog 规则:一个 Datalog 规则由一个规则体和一个规则头组成。
  • IDB 和 EDB 断言:一个 Datalog 程序中的 EDB 断言的真值事实在事先给出。
  • Datalog 程序的求值:我们应用规则的方法是把规则中的变量替换为一些能够使该规则提取真值的常量。
  • Datalog 程序的增量求值:通过增量求值的方法可以改进 Datalog 程序的求值效率。
  • Java 指针分析:我们可以用一个框架对 Java 中的指针分析建模。
  • 使用类型信息改进指针分析:引用变量所指向的堆对象的类型要么和变量类型相同,要么是变量类型的子类型。
  • 过程间指针分析:为了进行过程间分析,我们必须增加一些规则来反映参数是如何传递的,返回值是如何被赋给变量的。
  • 寻找调用图:因为 Java 具有虚方法,过程间分析要求我们首先界定有哪些过程可能在一个给定调用点上被调用。
  • 上下文相关分析:当过程具有递归特性时,我们必须把调用串中所包含的信息浓缩到有限多个上下文中。
  • 二分决策图:BDD 是一种使用带根的 DAG 表示布尔函数的简洁方法。
  • BDD 和关系:一个 BDD 可以作为 Datalog 程序中的断言的简洁表示方法。
  • 使用 BDD 实现数据流分析:任何可以被表示为 Datalog 规则的数据流分析都可以使用 BDD 上的操作来实现。这些 BDD 表示了规则所涉及的断言。这个表示方法经常会得到一个比其他已知方法更加高效的实现。

希望我的总结可以帮助大家,感谢阅读我的博客!

猜你喜欢

转载自blog.csdn.net/weixin_42558631/article/details/81273284