如何详细描述图解栈帧在程序运行过程中的每一层调用和局部变量存储的复杂过程?
- 内容介绍
- 文章标签
- 相关推荐
本文共计652个文字,预计阅读时间需要3分钟。
通用的栈结构+C语言在调用函数(过程)时,使用了栈数据结构来管理内存。当函数被调用时,会先将函数的参数、局部变量等信息压入栈中。当函数执行完毕后,这些信息会依次弹出栈,释放内存。在执行过程中,Q、p以及所有向上追溯到的调用链中的过程,都是暂时被挂起的。
通用的栈帧结构C语言在调用过程(函数)的时候使用了栈数据结构提供的后进先出的内存管理原则。
当Q 在执行时, p 以及所有在向上追溯到P 的调用链中的过程,都是暂时被挂起的。
当x86-64 过程需要的存储空间超出寄存器能够存放的大小时,就会在栈上分配空间,这个部分称为过程的栈帧(stack fram)。
下图给出了运行时栈的通用结构,包括把它划分为栈帧。当前正在执行的过程的帧总是在栈顶。
我们可以看到P调用过程Q时,两过程的栈帧时相邻的,且P到Q地址依次减小(往下)。
这里关于通用栈帧构造不在赘述,详情看CSAPP中3.7.1章节。
栈帧运行过程以简单的main函数调用add函数为例进行讲解。
本文共计652个文字,预计阅读时间需要3分钟。
通用的栈结构+C语言在调用函数(过程)时,使用了栈数据结构来管理内存。当函数被调用时,会先将函数的参数、局部变量等信息压入栈中。当函数执行完毕后,这些信息会依次弹出栈,释放内存。在执行过程中,Q、p以及所有向上追溯到的调用链中的过程,都是暂时被挂起的。
通用的栈帧结构C语言在调用过程(函数)的时候使用了栈数据结构提供的后进先出的内存管理原则。
当Q 在执行时, p 以及所有在向上追溯到P 的调用链中的过程,都是暂时被挂起的。
当x86-64 过程需要的存储空间超出寄存器能够存放的大小时,就会在栈上分配空间,这个部分称为过程的栈帧(stack fram)。
下图给出了运行时栈的通用结构,包括把它划分为栈帧。当前正在执行的过程的帧总是在栈顶。
我们可以看到P调用过程Q时,两过程的栈帧时相邻的,且P到Q地址依次减小(往下)。
这里关于通用栈帧构造不在赘述,详情看CSAPP中3.7.1章节。
栈帧运行过程以简单的main函数调用add函数为例进行讲解。

