- 博客(6)
- 资源 (5)
- 收藏
- 关注
原创 数据流分析的局限性
引子前面我们介绍了很多关于数据流分析的知识,虽然说数据流分析是整个代码分析基础中的基础,但是数据流分析还是存在很大的局限性,一部分局限性来自于数据流分析所做的假设(例如假设所有路径可达),一部分局限性来自于分析语言的性质(例如C++语言中的异常处理或多态)。为了作出可靠的决定,所以编译器设计者必须了解数据流分析能做什么以及它不能做什么。 Nodes are required to hold in
2016-02-29 22:06:31 2440
原创 数据流分析(三)
引子在数据流分析(一)和数据流分析(二)中我们介绍了数据流分析的基本模式以及到达定值和活变量的分析。在这篇文章中我们简要介绍一下可用表达式和数据流分析中的格。可用表达式数据流分析中的格可用表达式 如果从流图入口结点到达程序点 p 的每条路径都对表达式 x + y 求值,且从最后一个这样的求值之后到p点的路径上没有再次对x或y赋值,那么 x + y 在 p 点上可用(available)。
2016-02-29 21:47:05 6456 2
原创 Name Mangling
引子为了在链接的时候能够让链接器唯一标识全局变量或者函数等的符号,编译器实现了一种name mangling的技术(也叫做name decoration),这个技术能够给所有目标文件中的符号一个唯一的名字。具体的实现方式就是编译器向函数,结构体,类或者其他的数据类型的对象名中附加上相应的类型信息,然后这个信息供链接器使用来实现链接过程中的符号决议。由于很多语言都允许对象同名,这些同名的对象或者处于不
2016-02-29 16:59:40 2637
原创 clang中的活跃性分析
引子clang和LLVM都实现了活跃性分析,只是两者的目的不同,一个用于后续静态代码分析,一个用于后续的代码生成以及代码优化。clang活跃性分析实现主要在LiveVariables.h和LiveVariables.cpp这两个文件中,和常见的活跃性分析不同,clang的活跃性分析主要用于clang static analyzer,在静态代码分析的过程中删除死的状态和符号值。 There’s a
2016-02-25 13:26:58 3236
原创 数据流分析(二)
引子我们在数据流分析(一)中简要介绍了数据流分析的基本概念,下面我们集中分析一些数据流分析的实例来阐述数据流分析的核心思想。到达定值活变量可用表达式到达定值什么是到达定值“到达定值”是最常见的和有用的数据流模式之一。编译器能够根据到达定值信息知道 x 在点 p 上的值是否为常量,而如果 x 在点 p 上被使用,则调试器可以指出x是否未经定值就被使用。 如果存在一条从紧随在定值 d 后面的
2016-02-23 16:07:01 10500 3
原创 数据流分析(一)
引子编译器后端会对前端生成的中间代码做很多优化,也就是在保证程序语义不变的前提下,提高程序执行的效率或减少代码size等优化目标。优化需要依靠代码分析给出的“指导信息”来相应地改进代码,而代码分析中最重要的就是数据流分析。另外数据流分析是程序静态分析的基础。所以掌握数据流分析对编译后端极为重要。何为数据流分析数据流抽象数据流分析模式基本块上的数据流模式何为数据流分析 数据流分析指的是一
2016-02-21 17:25:12 20445 6
Modern Compiler Design (David Galles 2004)
2014-10-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人