12、控制依赖与切片的新基础

控制依赖与切片的新基础及应用

控制依赖与切片的新基础

1. CFG的唯一结束节点限制

大多数已知的控制依赖定义都要求控制流图(CFG)满足唯一结束节点的要求,但许多软件系统无法满足这一特性。现有工作要么直接要求CFG具有此属性,要么建议对CFG进行扩充以实现这一属性,具体步骤如下:
1. 向CFG中插入一个新节点e。
2. 从每个出口节点(除e外)添加一条边到e。
3. 在每个非终止循环中选择一个任意节点n,并添加一条从n到e的边。

然而,这种扩充会在多个方面使被分析的系统变得复杂:
- 非破坏性扩充:会生成一个新的CFG,消耗时间和内存。
- 破坏性扩充:可能与CFG其他使用者的要求冲突,需要在后续分析前撤销扩充;若不撤销,图算法和分析算法需要能够处理嵌入在扩充CFG中的实际CFG。

许多系统的主线程控制循环没有出口,例如Xt库中的应用程序会进入一个无限循环来管理事件分发,PalmOS中的应用程序可能会忽略停止代码而不终止,除非被显式杀死。在这种情况下,为了扩充CFG而选择循环中的一个节点作为出口节点可能会干扰控制依赖的计算。

2. 新的依赖定义

为了解决上述问题,我们考虑不强制要求唯一结束节点的控制依赖的替代定义。

2.1 非终止敏感的控制依赖(ni ntscd → nj)

在CFG中,如果节点ni至少有两个后继节点nk和nl,并且满足以下两个条件,则节点nj(直接)非终止敏感地控制依赖于节点ni:
1. 对于从nk出发的所有最大路径,nj总是出现,并且要么nj = ni,要么nj在ni的任何出现之前出现。
2. 存在一条从nl出发的最大路径,在该路径上nj不出现,

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值