2017-06-10 35 views
-2
  1. 有人可以解释为什么我们确实需要堆栈帧吗?
  2. 它的核心目的是什么?
  3. 它有什么好处?
  4. 是不是只有一个堆栈指针足以推动和弹出 元素从堆栈,而不是使用任何帧?
  5. 这里Stack Frames,它提到堆栈帧是一个内存管理技术......它是如何一种内存管理技术?
+0

不,这些都不是家庭工作问题... – Aimal

+0

您是否在询问*堆栈帧*本身或*帧指针*? – EOF

+0

两种。帧指针属于堆栈帧的主题。 – Aimal

回答

1

有人可以解释为什么我们需要堆栈帧吗?
它的核心目的是什么?
它有什么好处?

我认为这些都是类似的问题。堆栈帧提供了一种手段,

  1. 跟踪调用堆栈;用于调试。
  2. 一种创建更大数组,结构和其他函数数据的方法。
  3. 一个相当快的访问溢出变量。
  4. 允许条件执行(和递归)子功能。
  5. 可以简化signal的处理。

对于没有大量寄存器的计算机,原因'3'更重要。无论上述项目是“核心目的”,其利益还是需要都是主观的。他们都是有堆栈的理由。由于上述原因,是否需要堆栈帧取决于应用程序设计者。

是不是只有一个堆栈指针足以只是从栈中推入和弹出元素而不使用任何帧?

在大多数情况下,push/pop是足够的,但它可能不是有效的;实际上在较新的ARM'应用程序二进制接口'(ABI)中,它不是必需的,gcc提供了使用/不使用堆栈帧的选项。在没有使用堆栈帧的情况下提供堆栈跟踪显然比较困难。 /弹出变得不那么直向前递归,可变分配(ALLOCA),函数指针等

在此栈帧,应提到的是堆栈帧

推是一个存储器管理技术...如何它是一种内存管理技术吗?

它以简单的方式管理内存。在'最后的请求'是'第一免费'的情况下,堆栈和帧指针是完美的。 Gnu Objstack与此类似。