需要堆栈帧,ARM

时间:2017-06-10 13:58:17

标签: arm stack stackframe

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

1 个答案:

答案 0 :(得分:1)

  

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

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

  1. 跟踪调用堆栈;对调试很有用。
  2. 创建更大阵列,结构和其他功能数据的方法。
  3. 可以快速访问溢出的变量。
  4. 允许子函数的条件执行(和递归)。
  5. 可以简化signal处理。
  6. 原因'3'在没有很多寄存器的机器上更重要。上述项目是“核心目的”,利益还是需要是主观的。它们都是堆叠框架的原因。出于上述原因,是否需要堆栈帧取决于应用程序设计人员。

      

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

    在大多数情况下,

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

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

      

    这里的Stack Frames,提到堆栈帧是一种内存管理技术......它是一种内存管理技术?

    它以简单的方式管理内存。 “最后一个请求”是“第一个空闲”,堆栈和帧指针是完美的。 Gnu Objstack类似。