目录

可用表达式分析 available expressions analysis

例子

静态分析框架

什么是计算

副作用分析

形式化

求值

结论

课后作业

编程作业


本文将通过一个简单的例子来体现静态分析的应用.

可用表达式分析 available expressions analysis

可用表达式分析指的是在没一个程序点,哪个表达式在所有到达此处的路径上已经被计算过了且没有修改. 如果被计算过了,那么我们可以复用原值. 英文说明在此处.

例子

以上程序, 的值在程序点3的位置都是不需要计算的. 因为未进入while循环之前, 其值在1处被计算. 进入循环之后,其值在5处被计算. 那就意味着,编译器可以在程序点3复用以前的值,从而优化程序.

静态分析框架

什么是计算

首先,我们来探讨一下计算. 我修的是计算科学, 到底计算机科学的根本问题是什么呢? 其实就是计算问题. 无论什么编程语言, 使用他们的最终目的都是为了计算. 操作系统也是,都是为了计算提供便利.

但是,在编程语言理论中,有一点有趣的就是,有些计算是有副作用的. 比如你在堆上分配了一个变量,然后函数调用不小心修改了它,以致后来出现了bug.这就是副作用的例子之一. 关于计算的入门会在后来的博客话题"类型和效果(type and effect systems)"中介绍.

副作用分析

 对于程序点1, 为了计算的值, 的值肯定要被计算出来. 这就导致了一个效果, 等式左右的值在下个程序点是已知的. 如果不存在任何修改变量值的行为,那么编译器可以用计算过的值替换所有相同的表达式.

从上述分析,我们知道,出现在等式右边的,是新增加的计算过的表达式,等式左边的变量,后续用到它的表达式是需要重新计算的.

形式化

用来确定每个类型的语句在分析中的作用.


用来确定每个程序点的值. 举例来说,可以求所有程序点到这个程序点的交集,这样我们的计算结果就对每一个程序路径适用.

求值

以上就是通过公式计算的结果.

但是, 静态分析一般无法精确结果,只能近似(approximation). 也就是说,我们无法完全模拟程序的运行时语义,因为静态分析并不是真的运行程序.由此,我们需要一种算法来获得具体的计算结果.

一种求固定点的方法在此,运算结果是

结论

由上述可知,在进入程序点3的时候,的值都是已知的.那么编译器就可以对应做出优化.

课后作业

  1. 为什么静态分析只能逼近结果,不能计算精确结果?

编程作业

下个文章将会有编程作业. 还在搞怎么分享文件.

Principles of Program Analysis -- 可用表达式分析相关推荐

  1. 【编译原理笔记18】代码优化:活跃变量分析,可用表达式分析

    本次笔记内容: 8-8 活跃变量分析 8-9 可用表达式分析 本节课幻灯片,见于我的 GitHub 仓库:第18讲 代码优化_3.pdf 文章目录 活跃变量分析 活跃变量 例:各基本块的出口处的活跃变 ...

  2. Roofline Model Toolkit: A Practical Tool for Architectural and Program Analysis

    Roofline Model Toolkit: A Practical Tool for Architectural and Program Analysis 描述了 Roofline Toolkit ...

  3. 数据流分析:可用表达式的计算+活跃变量计算+到达定值。

    引言 什么是可用表达式和活跃变量?假设有如下代码: int main() {int a=1,b=2,c=1;int x=a+b+b+b+b;int y=a+b+b+b+b;int z=a+b+b+b+ ...

  4. 也谈表达式分析和计算

    昨天看到 王博炜 Blog中<五进制>这 篇文章.其中关于5进制到10进制的转换自然没有什么意思,这篇文章给的代码主要是讨论如何进行表达式分析和计算的.作者自制了一个Stack,并且用其 ...

  5. Procrustes Analysis(普氏分析)

    Procrustes Analysis普氏分析法 选取N幅同类目标物体的二维图像,并用上一篇博文的方法标注轮廓点,这样就得到训练样本集: 由于图像中目标物体的形状和位置存在较大偏差,因此所得到的数据并 ...

  6. Statistical Analysis:关联度分析之灰色关联分析软件

    Statistical Analysis:关联度分析之灰色关联分析软件 导读:灰色关联分析,从其思想方法上来看,属于几何处理的范畴,其实质是对反映各因素变化特征的数据序列所进行的几何比较.用于度量因素 ...

  7. python基于pingouin包进行统计分析:使用mediation_analysis函数构建包含协变量的mediation analysis(中介分析)模型、covar参数指定协变量

    python基于pingouin包进行统计分析:使用mediation_analysis函数构建包含协变量的mediation analysis(中介分析)模型.covar参数指定协变量.以dataf ...

  8. Principles Of Mathematical Analysis, Third Edition免费下载地址

    walter rudin的大作 Principles Of Mathematical Analysis 下载地址: https://vdoc.pub/download/principles-of-ma ...

  9. SCA-Soft Composition Analysis软件成分分析

    1. 概述 目前 SCA(软件成分分析)在2016-2018年Gartner发布的DevSecOps中均有出现.但每年的关注点不同,在2016年的报告中,强调的是DevSecOps的安全测试和RASP ...

最新文章

  1. JFinal Nutz
  2. 如何用Python从本地将一个文件备份到Google Drive
  3. 开启Windows7多用户远程桌面
  4. 源码分析-HashSet、LinkedHashSet
  5. Rhel7 IPV6配置
  6. Hills And Valleys CodeForces - 1467B
  7. OS X Mountain Lion上的多个Java版本
  8. flask中 app.run(host='0.0.0.0', port=5000, debug=False) 不能用外网ip访问的解决办法
  9. 软件协会发布开源软件与商业软件知识产权报告
  10. spark-streaming连接flume时报错org.jboss.netty.channel.ChannelException: Failed to bind to: /IP:PORT
  11. 困计算机无法启动adb,win7系统无法启动adb.exe工具包的解决方法
  12. android 判断两个整数,【tips】判断两个整数是否是同一个数量级
  13. 树莓派入门教程 - 0 - 准备篇 - 0.1 第一次开机
  14. swwht(canvas).demo
  15. linux虚拟usbgs0,USB模拟串口
  16. 爬虫爬取视频指定秒的画面
  17. 互联网大佬打脸啪啪啪啪史
  18. 我的世界服务器自定义附魔外挂,我的世界怎么用命令方块刷自定义附魔神器
  19. 华为交换机系统版本升级(S7706)
  20. windows 安装pyenv做python环境控制(极其简单)

热门文章

  1. 【DevEco Studio】无法下载ets
  2. Fedora 14 安装 DDD过程
  3. Ubuntu 16.04下 hyperledger fabric1.0 网络环境搭建过程
  4. 【FeathersJS 入门】安装 Feathers
  5. 基于flowable的upp(统一流程平台)运行性能优化(2)
  6. Java操作PDF文件,就是如此简单
  7. 机器学习关键步骤(二)
  8. 今天遇到的栈溢出问题
  9. 图书管理系统设计blog
  10. 如何在 PDF Transformer+中进行FB2和EPUB转换设置