28、动态内存数据依赖程序的自动化分析

动态内存数据依赖分析方法

动态内存数据依赖程序的自动化分析

1. 堆操作基础

在对动态内存数据依赖程序进行分析时,堆操作是基础。对于一个堆 (h = (M, Succ, \lambda, Val)),我们定义 (h⊖m) 为从堆 (h) 中删除单元 (m) 后得到的堆 (h’)。具体定义如下:
- (M’ = M - {m})
- 若 (Succ(m’) \neq m),则 (Succ’(m’) = Succ(m’));否则 (Succ’(m’) = ),即指向 (m) 的单元的后继在 (h’) 中变为悬空状态。
- 若 (\lambda(x) = m),则 (\lambda’(x) =
);否则 (\lambda’(x) = \lambda(x)),也就是在 (h) 中指向与 (x) 相同单元的变量在 (h’) 中变为悬空状态。
- 若 (m’ \in M’),则 (Val’(m’) = Val(m’)),即 (Val’) 是 (Val) 在 (M’) 上的限制。

对于转移 (t = (q_1, op, q_2)) 和配置 (c = (q, h))、(c’ = (q’, h’)),当 (q = q_1),(q’ = q_2) 且 (h \xrightarrow{op} h’) 时,记为 (c \xrightarrow{t} c’)。这里 (h \xrightarrow{op} h’) 表示通过对 (h) 执行操作 (op) 得到 (h’)。以下是三种常见操作的定义:
- (op) 为 (x := y.next) 形式,要求 (\lambda(y) \in M),(Succ(\lambda(y)) \neq ),且 (h’ = (h.\lamb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值