基于流敏感-不敏感指针分析的多线程程序内存安全
1. 背景与动机
在当今的编程领域,多线程编程已成为主流实践,而指针分析对于编译器优化、程序修正以及内存安全检查等方面至关重要。指针分析能够计算程序指针所指向的内存位置信息,而内存安全分析则旨在静态证明程序不会违反语言语法对指针进行非法操作。
多线程程序的编译和分析极具挑战性,因为线程间的潜在交互使得传统的顺序程序编译和分析技术难以直接应用。例如,当一个线程写入一个指针变量,而另一个线程同时访问该变量时,会导致变量可能指向的指针集合扩大。
指针分析和内存安全分析技术可根据流敏感性分为流敏感和流不敏感两类。流不敏感方法忽略程序的控制流,将程序语句视为可按任意顺序执行任意次数,这种方法效率较高但精度较低;流敏感方法则考虑程序命令的顺序,精度更高但效率较低。因此,在实际应用中需要在两者之间进行权衡。
为了更好地解决多线程程序的指针分析和内存安全问题,本文提出了一种结合流敏感和流不敏感分析的新型技术,以类型系统的形式呈现,旨在兼顾准确性和可扩展性。
1.1 示例程序
以下是一个示例程序,展示了多线程程序中可能出现的内存安全问题:
1. x := &y;
2. *x := 2;
3. par{
4. {y := &x}
5. {y := 5;
6. *x := &z}
7. };
8. x := &z;
9. z := 2;
10. y := *z
该程序在执行最后一行时会因引用没有地址的变量
多线程内存安全指针分析技术
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



