4

我试图完全理解“堆栈图”原理。有人可以检查我是否正确吗?

到目前为止,我的理解是堆栈图用于跟踪代码中函数中使用的变量。

但是我不确定是否在某个函数中创建了一个新变量,它是否应该包含在堆栈图中。

例如,我们应该在堆栈图中包含变量“p”吗?比方说:

def g(y):
    p = A(y, y)  
    print z, p
    return p

def A(x, y):
    x = x + 1
    return x * y

x = 1
y = x + 2

我想我的堆栈应该看起来像:

<module>  x --> 1
          y --> 3   (Should I put 3 or x + 2 here)

fct g     y --> 3 (should I stop here or should I include a line for the variable p)


fct A     x --> 4
          y --> 3 

最后一个问题是:我们是否应该提及该函数的其他功能。就像函数 A 的情况一样,它返回 x*y = 12。我们应该将它包含在堆栈图中还是该图正确的方式?

谢谢

4

1 回答 1

4

根据堆栈图的定义:

每个功能都由一个框架表示。框架是一个盒子,旁边有一个函数的名称,里面有函数的参数和变量。

这意味着您还需要考虑函数中定义变量。最好保持y的值y=3而不是y=x+2- 因为我们跟踪变量值并且通常不关心这些值是如何获得的

要回答您的第二个查询 - 从描述中可以看出,堆栈图主要用于跟踪变量到函数名称的映射。但是,请记住,在开发语言处理器和运行时,它们确实对提议的堆栈图原则进行了必要的补充,使处理变量或识别错误变得容易或高效。

希望这篇文章能澄清你的疑惑

于 2013-08-07T06:24:24.670 回答