为了模拟过程的运行时语义,已知通常需要堆栈。 如果语言不允许过程递归,我们是否必须有堆栈? 如果语言确实允许过程递归,但递归调用只能在过程结束时发生,那么我们是否必须有堆栈?
答案 0 :(得分:1)
在您可能感兴趣的Fortran中,您需要堆栈进行递归。这是因为您希望递归过程的局部变量对于过程的每次调用都是独立的。并非所有人都必须独立,但你通常希望有这种可能性。
如果没有递归,您只能随时调用任何过程,因此局部变量可以是静态的。递归不是这样,你不知道它有多深,所以你需要一些动态数据结构来存储数据。如果需要,您可以在堆上模拟堆栈,但是您确实需要一些动态内存。
通常,堆栈也用于自动(可变长度)数组,但这不是必需的,它们可以在堆上,具体取决于编译器及其设置。
答案 1 :(得分:0)
Stack用于存储方法结束执行后到达的返回地址。 Stack也用于分配持续时间有限的对象。
因此,如果你的launguage不允许自动(C风格)对象(换句话说,不允许本地范围)或不允许方法,我想语言可以完全省略堆栈实现。
我认为递归与堆栈的要求没有任何关系。