需要堆栈帧,ARM


  1. 有人可以解释为什么我们需要堆栈帧吗?
  2. 它的核心目的是什么?
  3. 它有什么好处?
  4. 仅仅一个堆栈指针不足以推动和弹出吗 堆栈中的元素并且不使用任何框架?
  5. 这里堆栈帧
  6. ,提到堆栈帧是一个内存 管理技术...它如何成为一种内存管理技术?

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

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

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

原因"3"在没有大量寄存器的机器上更为重要。 上述项目是否是"核心目的"、利益或需要是主观的。 它们都是拥有堆栈帧的原因。 由于上述原因是否需要堆栈帧取决于应用程序设计人员。

仅仅一个堆栈指针不足以从堆栈中推送和弹出元素而不使用任何帧吗?

在大多数情况下,push/pop 就足够了,但它可能效率不高;事实上,在较新的 ARM "应用程序二进制接口"(ABI) 中,它不是必需的,gcc 提供了使用/不使用堆栈帧的选项。 在不使用堆栈帧的情况下提供堆栈跟踪肯定更难。

推送/弹出通过递归、变量分配(alloca)、函数指针等变得不那么直接。

这里堆栈帧

,提到堆栈帧是一种内存管理技术......它如何成为一种内存管理技术?

它以简单的方式管理内存。 如果"最后一个请求"是"第一个免费",则堆栈和帧指针是完美的。 Gnu Objstack也是类似的。

最新更新