Points-To Analysis

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)。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值