【问题标题】:Why does gcc create a new stack for each function? [duplicate]为什么 gcc 为每个函数创建一个新堆栈? [复制]
【发布时间】:2018-11-07 06:29:18
【问题描述】:

我最近一直在看反汇编的c(都是用gcc编译的)。我注意到每个函数都以

开头
push rbp 
mov rbp, rsp

结尾
pop rbp

或等效的寄存器。我听说这个裁判为函数设置了一个新的堆栈,但这实际上对代码有什么好处。如果没有它,代码会不会完全一样,因为 rbp 无法在 c 中访问或碰巧(没有内联汇编),并且指针和变量都是来自 rsp

的偏移量

【问题讨论】:

  • 它对代码有什么好处?它没有。这就是为什么 gcc 只有在你不开启优化的情况下才会这样做。
  • 函数的新堆栈帧。
  • 你编译没有优化?如果这是真的,编译器会尝试完全按照您在 C 中键入的方式来表示代码。
  • this 有帮助吗?
  • @PSkocik 但是如果它没有任何好处,那只是额外的说明,那么为什么它需要在那里

标签: c


【解决方案1】:

在函数执行期间,堆栈指针可能会有所不同,因为它在计算期间用于临时存储。但是,您仍然必须能够访问函数参数,它们是基指针 (rbp) 的偏移量。

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 2018-08-29
    • 2012-12-19
    • 2020-12-04
    • 2018-01-28
    相关资源
    最近更新 更多