为 CompCert 设计具体的内存模型
1 更具体的 CompCert 内存模型
1.1 CompCert 的内存模型
CompCert 语言语义中使用的抽象值包括 32 位整数(写作 int(i))、32 位浮点数(写作 float(f))、位置(写作 ptr(l))以及特殊值 undef(表示任意位模式,如未初始化变量的值)。抽象内存被视为一组分离的块,位置 l 是一个对 (b, i),其中 b 是块标识符(即抽象地址),i 是该块内的整数偏移量。指针算术仅修改位置的偏移部分,而块标识符部分保持不变。如果偏移量 i 在块 b 的两个边界内,则指针 ptr(b, i) 对于内存 M 是有效的(写作 valid pointer(M, b, i))。
抽象值通过 load(加载)和 store(存储)内存操作从内存中加载或存储到内存中。这些操作中会出现内存块,用于简洁地描述存储值的大小、类型和符号性。这些操作返回选项类型,用 ∅ 表示失败,⌊x⌋ 表示成功返回值 x。free 操作可能失败(例如,当要释放的位置已经被释放时),而 alloc 操作永远不会失败,因为内存大小是无界的。
在内存模型中,整数和浮点数的字节级内存表示是公开的,而指针保持抽象。具体内存被建模为一个映射,将每个位置与一个具体值 cv 关联起来,cv 是一个字节大小的量,描述了内存单元的当前内容。它可以是表示整数或浮点数一部分的具体 8 位整数(写作 bytev(b))、表示位置 l 的第 i 个字节(i ∈ {1, 2, 3, 4})的 ptrv(l, i),或者用于建模未初始化内存的 undefv。
1.2 增强内存模型的动机
具有符号表达
超级会员免费看
订阅专栏 解锁全文
402

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



