为什么gcc为每个函数创建一个新堆栈?

时间:2018-05-28 16:10:28

标签: c

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

开头
push rbp 
mov rbp, rsp

结尾
pop rbp

或等效的寄存器。我听说过这个裁判为这个函数设置了一个新的堆栈,但是这对代码有什么好处呢。如果没有它,代码是否会完全相同,因为rbp无法在c中访问或偶然(没有内联汇编),指针和变量都是rsp的偏移

1 个答案:

答案 0 :(得分:1)

在执行函数期间,堆栈指针可能会因计算期间用于临时存储而变化。但是,您仍然可以访问函数参数,这些函数参数是基指针(rbp)的偏移量。