1,stack frame
stack我们都知道,每一个进程都有自己的栈。考虑进程执行时发生函数调用的场景,母函数和子函数使用的是同一个栈,在通常的情况下,我们并
不需要区分母函数和子函数分别使用了栈的哪个部分。但是,当我们需要在执行过程中对函数调用进行backtrace的时候,这一信息就很重要了。
简单的说,stack frame就是一个函数所使用的stack的一部分,所有函数的stack frame串起来就组成了一个完整的栈。stack frame的两个边界分别由FP和SP来限定。
2,backtrace
在程序执行过程中(通常是发生了某种意外情况而需要进行调试),通过SP和FP所限定的
stack frame,就可以得到母函数的SP和FP,从而得到母函数的stack
frame(PC,LR,SP,FP会在函数调用的第一时间压栈),以此追溯,即可得到所有函数的调用顺序。
3,gcc关于stack frame的优化选项
看起来FP只是在backtrace的时候有用,所以如果我们没有backstrace的需求,我们是否可以不使用FP。
其实gcc就有一个关于stack frame的优化选项:
-fomit-frame-pointer
阅读(783) | 评论(0) | 转发(0) |