内存模型证明:从Coq到Why3的自动化提升
1. 内存模型概述
内存模型在程序行为与内存读写行为之间提供了必要的抽象。在对编译器和底层代码进行推理时,需要考虑内存管理、并发行为、类型转换、结构化指针、重叠位置等多个因素,因此不能简单地将内存解释为值到位置的赋值。
内存模型的通用思想是明确描述并对操作内存的某些操作(如读取、写入、分配、释放)的行为提供一些保证,从而在程序执行的任何时刻对“内存状态”做出具体假设。例如,在一个位置写入值后再读取,应该返回之前存储的值。
内存模型有多种定义方式:
- 作为程序执行所完成的有效操作轨迹集合的描述,如IBM POWER多处理器。
- 作为接收和回复消息的抽象机器,如CompCertTSO。
- 作为一组可以调用的函数,并对其结果提供一些保证,如Leroy和Blazy的内存模型。
2. Leroy和Blazy的内存模型
Leroy和Blazy的内存模型用于Compcert编译器的形式验证,该编译器将C语言的Clight子集转换为PowerPC汇编代码。
2.1 抽象定义
- 抽象类型 :使用抽象类型
val表示值,包括常量vundef表示未定义值;使用抽象类型block描述内存块引用;使用抽象类型mem表示内存状态。 - 内存定义 :内存状态是一组分离的块,每个块表现为一个字节数组,通过字
超级会员免费看
订阅专栏 解锁全文
908

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



