10、为 CompCert 设计具体的内存模型

为 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 增强内存模型的动机

具有符号表达

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值