Compiler construction 激活记录在内存中是否连续?

Compiler construction 激活记录在内存中是否连续?,compiler-construction,operating-system,programming-languages,Compiler Construction,Operating System,Programming Languages,激活记录是否在内存中连续排列?若有,原因为何 答案是。。。视情况而定。在许多编程语言(如C或C++)中,实现定义了它们是否在内存中连续排列,但通常是这样。这是因为在堆栈上分配激活记录的速度非常快,只需使用一个堆栈指针,然后通过递增或递减来分配/释放内存。但是,无法保证该语言能够做到这一点 在其他语言中,尤其是支持闭包的语言中,激活记录不是连续排列的,因为激活记录的内存可能需要作为闭包的一部分保存。在这种情况下,内存不一定按照堆栈的模式分配和释放,因此激活记录通常分散在内存中。此外,具有协程或生成

激活记录是否在内存中连续排列?若有,原因为何

答案是。。。视情况而定。在许多编程语言(如C或C++)中,实现定义了它们是否在内存中连续排列,但通常是这样。这是因为在堆栈上分配激活记录的速度非常快,只需使用一个堆栈指针,然后通过递增或递减来分配/释放内存。但是,无法保证该语言能够做到这一点


在其他语言中,尤其是支持闭包的语言中,激活记录不是连续排列的,因为激活记录的内存可能需要作为闭包的一部分保存。在这种情况下,内存不一定按照堆栈的模式分配和释放,因此激活记录通常分散在内存中。此外,具有协程或生成器的语言(如Python)不一定能在堆栈中连续存储激活记录,因为函数的活动顺序和完成顺序不符合堆栈所需的后进先出模式。

您能解释一下这是什么意思吗“支持闭包的语言"? 我需要一个例子,也许甚至是一个链接。@I_我教过一门编译器课程,如果你想看的话,我有一次教过他们,有没有帮助@templatetypedef,但我们可以在激活记录中维护指向下一个/上一个记录的显式链接,并在分配/释放内存时使用它们修改堆栈指针。为什么让它们相邻会更快?@templatetypedef-谢谢斯瓦兹先生,这真的很有帮助。:)@snehasawlani与堆相比,您对大多数系统上函数堆栈的实现有多熟悉?堆栈的速度明显快于堆(通常需要一条汇编指令来分配或取消分配堆栈上的内存),这就是为什么在堆栈中分配激活记录如此之快的原因。