int a,b;
int *x;
void f(void)
{
++*x;
}
int main(){
x = &a;
f();
x = &b;
f();
}
f()
进行了两次分析,因为它从调用站点调用。这使得它很精确,因为f()
的影响每次都相当不同。上下文敏感分析可以推断出在第一次调用后a==1
且b
未更改,并且在第二次调用后a
和b
均为1
。上下文敏感性也使分析变得昂贵。上下文不敏感分析仅会对f()
进行一次分析,并且通常只产生“f()
修改了a
或b
,因此在调用f()
之后,这些变量的内容均未知”的信息。