1概述
经典研究挑战:快速获得大型程序的精确度。
最近来自McGill [2,20]和斯坦福[34,35]的小组使用二元决策图(BDD)对大型程序进行精确分析。 Raman [28]简要介绍了BDDs。

新的研究挑战:增量分析。 不完整程序。 需求驱动的分析(例如,[30])。 动态类加载(例如,[15,24])。

软件工程决策:如何为您尝试解决的软件工程问题选择正确的指针分析。 需要付出什么代价?
Liang等人发现Andersen风格(包含)分析比Steensgaard风格(统一)更精确。
Lhot'ak和Hendren [21]发现物体敏感性Milanova等人。 [25]给了Java最大的收益,与[34,35]等方法相比。

note:允许将个人或教室使用的全部或部分作品的数字或硬拷贝免费授予,前提是副本不是为了利润或商业利益而制作或分发的,并且副本承担此通知并在第一页上完整引用。 要以其他方式进行复制,重新发布,在服务器上发布或重新分发到列表,需要事先获得特定许可和/或费用。(6.883'05麻省理工学院EECS 6.883项目分析,Ernst教授版权归作者所有。 2005年11月14日)

研究者:Hind [12]拉曼[28]
动态分析:在这里完成的工作相对较少。 Gross [10],Mock等人表示,与静态分析相比,改进了100倍,程序执行速度下降了100倍。

1.1复杂性
摘要来自Chakaravarthy [3]:

给定一个程序和两个变量p和q,指针分析的目的是检查p是否可以在程序的某些执行中指向q。这个充分研究的问题在编译器优化中起着至关重要的作用。当允许动态内存时,已知该问题是不可判定的。但只有当变量被允许为结构时才知道结果。我们扩展结果表明,即使只允许标量变量,问题仍然是不可判定的。我们的第二个结果涉及一个称为控制流不敏感分析的指针分析版本,其中一个忽略程序的控制流并假设语句可以按任何顺序执行。已知问题是NP-Hard,甚至当不允许动态内存且变量是标量时。我们表明,当变量被进一步限制为具有明确定义的数据类型时,问题在于P.相应的控制流敏感版本,即使有进一步的限制,也被称为PSPACE-Complete。因此,我们的结果提供了一些理论证据,即流不敏感性分析比流敏感性分析更容易。此外,虽然已知指针分析的大多数变化在计算上都很难,但我们的结果给出了在多项式时间内可解决的非平凡指针问题的罕见情况。

2.Steensgaard风格

思考下面程序

x = &a;
y = &b;
p = &x;
p = &y;

2.1直观的表述[29]
现在我们将使用莱德[29]制定的Steensgaard方法构建该程序的指针图。

前三个陈述很容易:

最后声明需要更多操作来处理:

结果指针图过度近似:

为什么我们要做这个collapse? 如果我们不进行折叠,分析似乎是程序大小的线性分析。 问题是a = b等陈述; 请参阅下面Andersen分析的示例,了解为什么这些会带来更多复杂性

2.2基于类型的配方[6]
首先,我们为每个变量分配自己的类型:

x : t1
y : t2
a : t3
b : t4
p : t5

然后我们构造初始约束:

x = &a; t1 = ref(t3 × _)
y = &b; t2 = ref(t4 × _)
p = &x; t5 = ref(t1 × _)
p = &y; t5 = ref(t2 × _)

现在我们解决/统一约束。 首先我们看到:

t5 = ref(t1 × _) = ref(t2 × _)

所以我们将t1和t2合并到t1中。 表达式看起来像这样:

x : t1
y : t1
a : t3
b : t4
p : t5
t1 = ref(t3 × _)
t1 = ref(t4 × _)
t5 = ref(t1 × _)

所以我们将t3和t4合并到t3中。 世界看起来像这样:

x : t1
y : t1
a : t3
b : t3
p : t5
t1 = ref(t3 × _)
t5 = ref(t1 × _)

我们已经完成了解决。 存储形状图是:

如果我们将其扩展为指针图,我们得到:

3 Andersen Example

思考下面程序

q = &x;
q = &y;
p = q;
q = &z;

前两个陈述很简单:

第三个声明。 查看q指向的所有内容,并将p指向它们。 加上虚线,提醒我们pts(q)属于pts(p)

第四个声明。 加入q指向z的边缘。

但虚线提醒我们pts(q)属于pts(p)。 所以我们需要添加p指向z边缘。 这是额外的工作,使Andersen分析更加昂贵。 在Steensgaard样式分析中,我们会在第二个语句中折叠x和y,然后我们就不必担心这个额外的工作(尽管我们会失去精度)

安徒生是O(n3)。
Steensgaard据说是基于平等的,例如:pts(q)= pts(p)。

Points-To Analysis相关推荐

  1. 机器学习 多变量回归算法_如何为机器学习监督算法识别正确的自变量?

    机器学习 多变量回归算法 There is a very famous acronym GIGO in the field of computer science which I have learn ...

  2. php use 使用变量,php闭包中使用use声明变量的作用域实例分析

    本文实例讲述了php闭包中使用use声明变量的作用域.分享给大家供大家参考,具体如下: function getClosure($i) { $i = $i.'-'.date('H:i:s'); ret ...

  3. php7 opcode,php7最小化安装 vld扩展安装并查看php代码的opcode ast测试

    php7最小化安装 && vld扩展安装并查看php代码的opcode && ast测试 最小化安装php7 cd ~/software/ cd php-src git ...

  4. 深入理解PHP之foreach

    招聘 标签(空格分隔): 招聘 PHP 国贸 语言基础 foreach 语法结构提供了遍历数组的简单方式. php5之前, foreach仅能用于数组 php5+, 利用foreach可以遍历对象 f ...

  5. php opcode列表,PHP中的opcode

    opcode是php语言里供zend引擎执行的一种中间代码,类似java中的字节码.或者python中的字节码对象pycodeobject. 对于如下的一段php代码 echo "Hello ...

  6. PHP中的opcode

    opcode是php语言里供zend引擎执行的一种中间代码,类似java中的字节码.或者python中的字节码对象pycodeobject. 对于如下的一段php代码 <?php echo &q ...

  7. win7上安装php的扩展vld

    vld几乎是查看php opcode的唯一方式,常见的opcode可以参考官方文档. 看了网上好多文章装vld都是linux下的,索性看看如何在windows上安装,这里用的win7虚拟机,win10 ...

  8. PHP使用vld扩展查看opcodes

    PHP使用vld扩展查看opcodes 需要分析PHP代码的性能,或者说实现同样功能的代码到底哪个更好呢?或者说想知道底层的实现可以使用VLD查看opcode. 下载安装vld扩展 该扩展以收录在 P ...

  9. Advance articles alert 27 July 2019

    1.Learning common and specific patterns from data of multiple interrelated biological scenarios with ...

  10. php webshell探索-常见小马的opcode

    OpCode 一.php opcode 二.常见小马的opcode 1.直接型 2.通过反射类调用 3.通过排序函数调用 4.通过类的混淆 1.类的魔术方法 2.类的自定义方法 3.反序列化 5.通过 ...

最新文章

  1. php代码实现对word文件的查找与替换,ThinkPHP5使用phpword实现文件模板字符替换
  2. Java需要注意的一些小细节
  3. powerquery加载pdf_PowerQuery技巧之自学教程
  4. linux mint更换mac,在Ubuntu、Linux Mint上安装Mac OS X主题
  5. android fragment点击返回键实现内容切换?
  6. 为多用户安装conda_Anaconda软件安装
  7. LNMP安装目录及配置文件
  8. 安卓10省电还是费电_拍照成罪魁祸首 安卓十大耗电App排行公布
  9. 配置eclipse插件
  10. 一起谈.NET技术,巨大转变!ASP.NET MVC2调用AJAX新特征
  11. 使用Java 10调用C/C++动态链接库dll之HelloWorld
  12. UE4 讯飞语音识别插件
  13. mysql是dbf格式吗_数据库文件是什么格式啊
  14. Win2008:在 Win2008R2 中安装 PowerShell 4.0 (旧作)
  15. 八数码(有一个空的移动拼图模型+map.count的用法)
  16. balser相机连接设置设置步骤
  17. 总结HTML中不经常使用的标签
  18. Arduino、BeagleBoneBlack、树莓派、Debian Linux 学习手记
  19. 计算机香港专业学校排名,去香港读计算机专业什么学校好
  20. Excel VBA密码破解工具(VBA实现)

热门文章

  1. 基于采样的规划算法之RRT家族(四):Informed RRT*
  2. DapperLambda发布
  3. 51单片机数码管闪烁显示
  4. 【PHP入门篇】 WAMPServer集成环境安装与使用--慕课网【学习总结】
  5. Python - Opencv应用实例之头发自动分割、计数、特征统计智能分析系统
  6. 女主技能是鞭炮java游戏_五本女主怼人技能满分的言情小说推荐,全程嘴角疯狂上扬~...
  7. TCP/IP illustrated 阅读笔记(四) UDP协议和IP分段
  8. 喝醉的酒鬼总能找到回家的路,喝醉的小鸟则可能永远也回不了家
  9. 【正点原子MP157连载】 第十四章 IP核之RAM实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
  10. ubuntu 耳机有电流声的解决办法