概述 :
这篇文章的目的是告诉你关于前向数据流问题的迭代算法。在开始之前,您应该了解一些与数据流分析相关的术语。
迭代算法的术语:
在这里,我们将讨论迭代算法的术语如下。
- 数据流分析——
它被定义为一种技术,其中在计算机程序中的各个点计算一组值以收集信息。 - 控制流图 (CFG) –
它用于确定分配给变量的特定值可能传播到的程序部分。 - 天真的方法(Kildall 方法)——
执行程序数据流分析的最简单方法是为控制流图的每个节点设置数据流方程,在这种方法中,直到整个系统稳定到一个固定点为止,因此,通过重复求解它们在每个节点本地计算输入的输出。 - 迭代算法——
迭代算法是求解数据流分析方程的最常用方法。在这个算法中,我们特别有两种状态,一种是状态内的,另一种是状态外的。该算法从每个块的状态的近似值开始,然后通过在状态上应用传递函数来计算。通过应用连接操作更新状态。重复后两个步骤直到我们到达固定点:状态不变的情况。 - 上述算法的效率——
该算法求解数据流方程的效率受访问本地节点的顺序影响,还取决于数据流方程是用于控制流图上的前向还是后向数据流分析.
求解数据流方程的迭代顺序:
下面讨论用于求解数据流方程的一些迭代顺序如下。
- 随机顺序 –
在这个迭代中,顺序不知道数据流方程是解决前向还是后向数据流问题。因此,与专门的迭代顺序相比,性能相对较差。 - 邮购——
反向数据流问题的迭代顺序。在访问完其所有后继节点后访问一个节点,并使用深度优先策略实现。 - 反向后序 –
此迭代顺序用于转发数据流问题。该节点在其任何后继节点被访问之前被访问,除非后继节点被后边缘到达。 - 前向数据分析——
考虑任意点 ‘p’ 在前向分析中,我们对直到 ‘p’ 的事实进行推理,只考虑在 ‘p’ 节点的前辈。在反向分析中,我们从“p”开始对事实进行推理,只考虑后继者。
例子 –
line 1: if b==4 then
line 2: a = 5;
line 3: else
line 4: a = 3;
line 5: endif
line 6:
line 7: if a < 4 then
...// rest of the code
示例说明:
从上面的例子中,我们可以观察到第 7 行变量的到达定义是第 2 行的赋值 a = 5 和第 4 行的 a = 3 的赋值集合。