激活记录是否在内存中连续排列?如果是,为什么?
答案 0 :(得分:3)
答案是......这取决于。在许多编程语言(例如C或C ++)中,它的实现定义它们是否在内存中连续布局,但它们通常是。这是因为通过使用单个堆栈指针并仅递增或递减它来分配/释放内存,在堆栈上分配激活记录是非常快的。但是,不能保证语言会这样做。
在其他语言中 - 尤其是支持闭包的语言 - 激活记录不是连续布局的,因为激活记录的内存可能需要保存为闭包的一部分。在这种情况下,内存不一定以堆栈后面的模式分配和释放,因此激活记录通常分散在整个内存中。此外,具有协同程序或生成器(如Python)的语言不一定会在堆栈中连续存储激活记录,因为函数处于活动状态的顺序以及它们完成的顺序不符合后进/先出模式需要一个堆栈。