广义指向图:存在指针时的一种新的内存抽象
编程语言
2018-01-30 v1
摘要
流敏感与上下文敏感的指向分析难以扩展;对于自顶向下方法,问题集中于对同一过程的重复分析;对于自底向上方法,用于表示过程摘要的抽象在保持精度的同时未能扩展。我们提出一种称为广义指向图(GPG)的新抽象,它将指向关系视为内存更新,并使用间接层级计数对它们进行泛化,使未知被指对象隐式化。这使我们能够将 GPG 构建为自底向上过程摘要的紧凑表示,以内存更新及其之间的控制流来表达。其紧凑性由以下优化保证:强度削减降低间接层级,冗余消除移除冗余内存更新并最小化控制流(不过度近似内存更新间的数据依赖),以及调用内联增强这些优化的机会。我们为这些优化设计了新颖的操作与数据流分析。我们对指向分析可扩展性的探索得出如下洞见:程序分析中可扩展性的真正杀手不是数据量,而是为追求精度而可能使其承受的控制流数量。GPG 的有效性在于它们在丧失精度(即通过保持数据依赖而不过度近似)的情况下丢弃尽可能多的控制流。这就是为什么即便对于包含整个程序效果的主过程,GPG 也非常小的原因。这使得我们的实现能够扩展到 C 程序的 158kLoC。
引用
@article{arxiv.1801.09189,
title = {Generalized Points-to Graphs: A New Abstraction of Memory in the Presence of Pointers},
author = {Pritam M. Gharat and Uday P. Khedker and Alan Mycroft},
journal= {arXiv preprint arXiv:1801.09189},
year = {2018}
}