注:
- 少部分图片是自己绘制,大部分图片来自学习资料或网络和其他大师傅,且含有个人修改批注,仅用于个人记录和学习使用
- 主体以x86架构进行记录,AMD64的不同之处特殊说明
- 如有谬误烦请师傅指正,感激之至
文章目录
函数调用栈是怎样一种结构
- 函数调用栈是指程序运行时内存一段连续的区域,用来保存函数运行时的状态信息,包括函数参数与局部变量等
- 称之为“栈”是因为发生函数调用时,调用函数(亦称为父函数、caller)的状态被保存在栈内,被调用函数(亦称为子函数、callee)的状态被压入调用栈的栈顶
- 在函数调用结束时,栈顶的函数(子函数)状态被弹出,栈顶恢复到父函数的状态
- 函数调用栈在内存中从高地址向低地址生长,所以栈顶对应的内存地址在压栈时变小,退栈时变大
函数调用栈结构的具体细节
虚拟内存中所处位置
由于函数调用栈由高地址向低地址生长,故其在虚拟内存中所处地址较高,与堆共享同一块内存区域,增长方向相反。