我并不太深植于静态代码分析的非常正式的一面,因此这个问题。
几年前,我读到使用静态代码分析将代码与数据区分开来等同于停机问题。(需要引用,但我没有了。Stackoverflow 在此处或此处有线程。)至少对于基于Von Neumann 架构的常见计算机架构,其中代码和数据共享相同的内存,这似乎是有道理的。
现在看C/C++代码的静态分析和指针分析;程序不执行。不知何故,我有一种感觉,静态跟踪指针值的所有创建和使用类似于停止问题,因为我无法确定内存中的给定值是否是指针值,即我无法通过以下方式跟踪指针值的值流记忆。 别名分析可能会缩小问题的范围,但在面对多线程代码时它似乎变得不那么有用了。
(甚至可以考虑跟踪任意值,而不仅仅是指针:为任何给定的“有趣”值构造一个完整的值流似乎等同于停止问题。)
由于这只是一种预感,我的问题是:我可以参考更正式的发现吗?我弄错了吗?