边缘的颜色代表数据依赖关系:蓝色代表是,黑色代表。箭头的形状代表控制依赖关系:圆圈代表是,普通箭头否则。线的种类代表地址依赖关系:点表示是,否则是普通的。
地址依赖关系类似于数据依赖关系,但针对分配的正确部分。例如,声明:
*p = c ? a : b;
具有对 的控制依赖c
、对 和 的数据依赖以及对和a
的b
地址依赖。&p
p
好吧,这在真正的 PDG 中并不完全像这样,因为该语句由 Frama-C 在中分解:
if (c) { *p = a; } else { *p = b; }
但这就是想法。