堆栈分析实际上计算了函数调用层次结构的精确图像
考虑到红色检查(运行时错误)和灰色检查(无法到达的代码)
.换句话说:
- 如果函数调用在运行时不可达,则不考虑它。
- 如果存在红色检查(明确的运行时错误),分析就不会计算堆栈大小。其思想是:明确的运行时错误通常会导致崩溃,所以错误之后的函数调用无论如何都不会执行。因此,需要修正这些错误。
由于这个原因,堆栈大小的计算发生在分析的后面部分。这种计算比表面的堆栈大小计算更丰富,后者基于明显的函数调用层次结构,而不检查调用是否真的可以在运行时发生。
因此,不能将运行时错误检测与堆栈大小计算分开。换句话说,您不能只执行分析的早期阶段并获得堆栈大小。