Linux进程的栈和进程中函数的栈帧

主要理解了Linux进程的栈和函数的栈帧的区别和联系

Linux进程的栈和进程中函数的栈帧

上图中刻画的是一个Linux进程的结构图,其中本文想要关注的栈如上图所示是栈底在0xc0000000地址递减的一块进程内存区域
Linux系统中为每个进程分配的实际大小未做深究
Linux进程的栈的整体认知就是这么多,即
1)栈底在0xc0000000(并不需要栈底指针,函数的栈帧才需要栈底指针)
2)栈的增长方向,地址递减方向
3)栈顶指针esp
4)大小未知(不是本文关注的重点)
5)里面存放的内容是什么呢?


另一个概念是上文中提到的函数的栈帧的概念及其与Linux进程栈的关系
函数的栈帧就在进程中的栈的结构和分配的地址空间及实际内存中
函数的栈帧整体的理解是:
1)ebp是函数栈帧的栈底
2)esp是栈顶
3)一个进程的所有的函数的栈帧在调用此函数的时候建立,返回调用者后,被调函数的栈帧不再存在
4)所有的函数的栈帧的建立和消失是随着进程的执行而变化的一个动态过程


进程中的函数在进程提供的栈中要解决的是调用者和被调者的关系
1)如何从调用者进入被调者?
2)如何从被调者返回调用者?
3)调用者如何支配被调者(被调函数参数传递)?
4)被调者的价值如何体现(返回值的传递)?

相关推荐