数据流分析简介

article/2025/10/1 8:02:26

文章目录

  • 0. 前言
  • 1. 数据流分析简介
    • 1.1 数据流分析基本概念
    • 1.2 数据流分析结构简述
  • 2. 数据流分析应用
    • 2.1 定义可达性分析(Reaching Definitions Analysis)
      • 2.1.1 定义可达描述
      • 2.1.2 定义可达算法
      • 2.1.3 定义可达算法示例
    • 2.2 活变量分析(Live Variables Analysis)
      • 2.2.1 活变量描述
      • 2.2.2 活变量算法
    • 2.3 可用表达式分析(Available Expressions Analysis)
      • 2.3.1 可用表达式描述
      • 2.3.2 可用表达式算法
      • 2.3.3 可用表达式算法示例
    • 2.4 小结
  • 数据流分析基础

0. 前言

下面为静态分析课程的粗浅笔记。

南京大学数据流应用和基础:课件|视频

北京大学数据流基础和性质:课件|视频

个人偏向于喜欢南大的课程介绍方式。先介绍三种数据流分析的应用,再用给出数据流分析框架,并进行相关的证明。

课程中介绍的是流敏感&路径不敏感的数据流分析,它建立在控制流程图之上。建议先了解下三地址码转换成控制流程图。

注明:由于博客采用的是CC 4.0 BY-SA协议,但文中图片来自与课件截图。所以这些图片版权归课程老师所有。


1. 数据流分析简介

1.1 数据流分析基本概念

我尝试找一篇数据流分析的中文论文,好把论文中数据流分析的基本介绍搬运过来。但是没找见特别合适的论文。所以,这里,我们搬运下数据流分析-wiki:

数据流分析 是一种用于收集计算机程序在不同点计算的值的信息的技术。一个程序的控制流图(control flow graph, CFG)被用来确定对变量的一次赋值可能传播到程序中的哪些部分。这些信息通常被编译器用来优化程序。数据流分析的一个典型的例子就是可到达定义的计算。

进行数据流分析的最简单的一种形式就是对控制流图的某个节点建立数据流方程,然后通过迭代计算,反复求解,直到到达不动点。

程序静态分析介绍中已经说明了,静态分析无法做出准确判断。根据不同的情况选择误报或漏报:

  • may analysis:输出可能正确的信息(需做over-approximation优化,才能成为Safe-approximation安全的近似,可以有误报-completeness),注意大多数静态分析都是may analysis。

  • must analysis:输出必须正确的信息(需做under-approximation优化,才能成为Safe-approximation安全的近似,可以有漏报-soundness)。

1.2 数据流分析结构简述

在基本块内部,数据流三地址码指令上传递。

在基本块之前,基本块使用前驱基本块的输出作为输入。如果有多个前驱,将它们输出进行may/mus合并。数据流在基本块上传递。

根据需要,数据流可以从上向下,也可以从下向上。

在这里插入图片描述

2. 数据流分析应用

2.1 定义可达性分析(Reaching Definitions Analysis)

2.1.1 定义可达描述

在这里插入图片描述

这里,简单翻译下上面的描述。在d点定义的变量v,可以到达q点。其中p->q的路径中,v没有被重新定义。

这里搬运下定义可达性-wiki中的示例说明。

d1 : y := 3
d2 : x := y
# d1点的变量y,可以到达d2点位置。
d1 : y := 3
d2 : y := 4
d3 : x := y
# d1点中的变量y,不可以到达d3。因为d1点的y在d2点,被重新赋值。

定义可达分析,可用于检测可能的未定义变量。

2.1.2 定义可达算法

第一步定义最上面的虚拟Entry块的OUT为空集。

第二步对所有除了Entry之外的基本块,将其OUT设置为空集。

接下来是一个while循环,一轮循环下来只要有一个BB的OUT改变了,这个循环就不会终止。在这个while循环内部有一个for循环遍历所有的除了Entry之外的BB。然后里面的第一行是:忽略掉程序的条件判断,认为所有分支都有可能到达。执行may分析,将所有的前驱使用并集进行合并。里面的第二行是:B结束后的定义=B中能到达结尾的定义 + (B开始前的定义−由于B中的重新定义而使得失效的那些定义)。。直到所有的OUT都不变了,结果就收敛了,程序就终止了。

在这里插入图片描述

2.1.3 定义可达算法示例

可以参考Data Flow Analysis I-视频的算法迭代过程。

比如对于下面的程序而言,达到不动点之后。我们可以知道,在B5中可达的变量为(0011 1011)向量表示的变量。

在这里插入图片描述


2.2 活变量分析(Live Variables Analysis)

2.2.1 活变量描述

在这里插入图片描述

翻译下上面。活变量分析,判断在程序点p处变量v的值是否能在CFG中由p起始的某条路径中被使用,如果被使用了,那么v在p处存活,否则v就在p处死亡。

活变量分析,可以被用于寄存器分配,如果在过程中寄存器满了,我们倾向于替换一个包含死变量的寄存器(也是一种编译优化)

这里搬运下Live variable analysis-wiki中的示例。

b = 3
c = 5
a = f(b * c)

The set of live variables between lines 2 and 3 is {b, c} because both are used in the multiplication on line 3. But the set of live variables after line 1 is only {b}, since variable c is updated later, on line 2. The value of variable a is not used in this code.

2.2.2 活变量算法

对于程序来说,我们顺着路径正向查找的成本会比较高,因为每一个地方都要递归地查找后面路径、记录信息,直到最后才能判断v是否存活。反向的话,我们可以将存活信息逆着路径传播,把算法变为迭代,成本就会降低。

在这里插入图片描述

其中循环内部,最重要的合并过程和转换函数示例如下。详细见视频:Data Flow Analysis II

在这里插入图片描述


2.3 可用表达式分析(Available Expressions Analysis)

2.3.1 可用表达式描述

一个表达式x op y在程序点p是可用的(可替换)(available),如果满足:

  • 所有从entry到p的路径都必通过x op y语句。
  • 最后一次使用x op y之后,没有重定义操作数x、y。(如果重定义了x 或 y,则原来的表达式x op y中的x或y就需要被替代)

好处是,一个表达式如果多次出现,但一直没变,则不需要重复计算。

在这里插入图片描述

Available expression-wiki描述了与上面相同的含义:

在编译器优化领域,可用表达式是一种分析算法,它为程序中的每个点确定不需要重新计算的表达式集。据说在这种情况下可以使用这些表达式。要在程序点上可用,不应在从该表达式出现到程序点的任何路径上修改表达式的操作数。

该分析是正向数据流分析问题的一个示例。维护一组可用的表达式。分析每个语句以查看它是否更改了一个或多个可用表达式的操作数。这会在每个基本块的末尾生成一组可用的表达式,在数据流分析术语中称为开头。如果表达式在每个基本块的前辈的末尾可用,则该表达式在基本块的开头可用。这给出了一组可用集合的方程,可以通过迭代算法求解。

2.3.2 可用表达式算法

通过上面的定义。我们判断出,算法的数据流方向为从上向下;使用must分析

在这里插入图片描述

2.3.3 可用表达式算法示例

关于这个算法的迭代过程,可以参考视频Data Flow Analysis II

在这里插入图片描述

2.4 小结

将这三个数据流分析应用的算法总结如下表所示。

在这里插入图片描述

数据流分析基础

视频:Data Flow Analysis - Foundations I | Data Flow Analysis II

这部分内容涉及到数学证明,整理起来比较麻烦。详细将上面两个链接视频。

这里仅仅进行简单的描述。

上面三种数据流分析的应用,可以统归到数据流分析这个大框架中。由于数据流分析算法满足单调性,所以最终会进入最大/最小不动点。总体如下图所示
在这里插入图片描述


http://chatgpt.dhexx.cn/article/dBIf78qW.shtml

相关文章

Swift抖动动画

一、直接实现某个视图的持续抖动、只需要给视图的layer添加动画就行。 /// 直接实现/// - Parameters:/// - repeatCount: 重复次数/// - duration: 持续时间/// - values: //抖动幅度数组:不需要太大:从-15度 到 15度、再回到原位置、为一个抖动…

os “抖动”与工作集

由于请求分页式虚拟存储器系统的性能优越,在正常运行情况下,它能有效地减少内存碎片,提高处理机的利用率和吞吐量,故是目前最常用的一种系统。但如果在系统中运行的进程太多,进程在运行中会频繁地发生缺页情况&#xf…

ADC 采样数据抖动

MSP430或STM32,在使用内部ADC出现的采样数据异常抖动问题 采样设计: 用于检测供电线路电流及电压。 产品运行在两种模式下,1、低功耗静态模式(仓储态),2、全功能全速运行模式(工作态&#xff09…

SiTime 硅晶振抖动定义和测量方法

1 简介 抖动是时钟信号边沿事件的时间点集合相对于其理想值的离散时序变量。时钟信号中的抖动通常是由系统中的噪声或其他干扰导致的。具体因素包括热噪声、电源变化、负载条件、器件噪声以及相邻电路耦合的干扰等。 2 抖动的类型 时钟信号抖动定义有多种主要是:…

如何理解相位噪声与时间抖动的关系?

每当介绍相位噪声测试方案时,都会提到时间抖动,经常提到二者都是表征信号短期频率稳定度的参数,而且是频域和时域相对应的参数。正如题目所示,相位噪声与时间抖动有着一定的关系,那么相噪是与哪种类型的抖动相对应&…

网络延时抖动

问题背景: 上线后延时抖动很频繁,正常延时为10ms左右,抖动时延达到300ms以上,严重影响了该业务的性能 问题结论:tcp传输报文段延时异常,传输内容越大,受网络影响越大 index模块延时正常&…

html图片抖动,css3图片抖动

受1楼启发Document .sdf{ width:500px; height:500px; overflow:hidden; margin:200px auto; position:relative; } .outter{ width:174px; height:155px; position:absolute; top:100px; left:200px; transition:all 1s ease; } .dd{ background:url(http://www.ppt123.net/be…

图像随机抖动算法

本文参考知乎博客:图像处理之 Dithering(https://zhuanlan.zhihu.com/p/110104674) 图像抖动(dithering)常用于颜色量化(color quantization)的后处理,即去除颜色量化产生的一些视觉…

时钟抖动

本文转载至:http://m.elecfans.com/article/646572.html 随着通信系统中的时钟速率迈入GHz级,抖动这个在模拟设计中十分关键的因素,也开始在数字设计领域中日益得到人们的重视。在高速系统中,时钟或振荡器波形的时序误差会限制一个…

图像“抖动”原理

转载自博主:NWSUAF_LiuZhenHua,博客地址:https://blog.csdn.net/wzz110011/article/details/78170516?biz_id102&utm_term%E5%8A%A8%E5%9B%BE%E6%8A%96%E5%8A%A8&utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~soba…

时钟抖动(Jitter)的基本概念 【转载】

时钟抖动(Jitter)的基本概念 李倩 发表于 2018-03-13 10:21:08 电子说 随着通信系统中的时钟速率迈入GHz级,抖动这个在模拟设计中十分关键的因素,也开始在数字设计领域中日益得到人们的重视。在高速系统中,时钟或振荡…

什么是抖动?什么叫抖动

什么是抖动?什么叫抖动 抖动的定义是“数字信号的各个有效瞬时对其当时的理想位置的短期性偏离”,这意味着抖动是不希望有的数字信号的相位调制。相位偏离的频率称为抖动频率,与抖动有密切关系的第二个参数称为漂移,把它定义为“数字信号的…

什么是进程的抖动 | 抖动现象

抖动现象是指如果分配给进程的存储块数量小于进程所需要的最小值,进程的运行将会很频繁地产生缺页中断 ,这种频率非常高的页面置换现象称为抖动。 也可以说:页面在内存与外存之间频繁调度,以至于调度页面所需时间比进程实际运行时…

APP运营推广:新APP建设之后该怎么做好品牌运营?

APP市场推广的方法和渠道非常多,但是并不是每一个渠道都是适用所有APP的;对于一个APP市场推广的人员来说,这是值得认真思考的问题!“多面出击”是大部分APP运营人员都会采取的方法,把能够想到能做到的各种方法途径都尝…

【创业说】零经验接手APP运营推广,聊聊这两个月我是怎么熬过来的

编者按:本文来自一位创业者的匿名投稿(反复强调不要公开自己的身份),讲述了自己离职创业,从零开始做APP推广,所经历的各种推广方式,并且根据自己的情况评估了各个渠道的效果,创业容易…

APP生存法则:教你如何快速找到APP运营推广的捷径

APP的运营是一个APP能否生存的主要依靠,在运营的世界里有八大黄金法则,小编认为任何APP都可以运营这八大法则来进行推广。下面我们来了解一下移动APP运营的八大法则。 1、运营与推广一样重要 App上线一定阶段之后(基本上在10用户万以上),App…

移动互联网APP运营技巧分享

资源共享是互联网发展这么多年以来的一大重要表现,如今随着移动手机的不断涌现出来,间接的也带动了移动互联网的的发展,移动互联网是未来的发展趋势,借助这一趋势,APP运营,俗话说“守业更比创业难”,APP营销重要的不是开发出实用的APP,更重要的是如何运营。APP运营是指…

如何用Xinstall来做一款App运营推广?

现在是移动互联网的时代,人们对于智能手机的依赖性越来越大,传统pc端的业务都开始加入到开发App的队伍中来,APP开发完之后,就要做APP推广了,APP推广的方式有很多,比如广播范围广、投放广告、人工转发、口碑…

盘点行业APP运营推广渠道有哪些

【活动盒子—APP活动运营工具】无论是什么样的行业,只要是有自己的APP应用,就需要寻找相关的行业APP运营推广渠道。那么在行业APP运营推广渠道中,作为APP运营人员的我们要怎么做呢? 【活动盒子】:http://www.huodonghezi.com/ 什…

运营老司机分享:APP运营推广那些事

不管是新的APP还是已经运营中的APP,都是需要进行拉新、促活和留存三个环节;现在的APP开发并不难,市场上有非常多成熟的APP第三方服务商,你只需要把你的开发需求提交上去,就会根据你的要求进行app开发;当然APP开发只是最基础的一步…