函数的调用和返回使栈的增长和收缩呈线性。
专用寄存器---栈指针(stack pointer) , 用千跟踪当前栈顶。
每次调用函数时,会在栈上新分配一帧,每当函数返回时,再从栈上将此帧移去。
内核栈是每个进程保留在内核内存中的内存区域;
内核栈在执行系统调用的过程中供(内核)内部函数调用使用;
每个(用户)栈帧包括如下信息:
- 函数实参和局部变量:
由于局部变量都是在调用函数时自动创建的,因此在C 语言中称其为自动变量;
函数返回时将自动销毁这些变量(因为栈帧会被释放),这也是自动变量;
- (函数)调用的链接信息:
每个函数都会用到一些CPU 寄存器,比如程序计数器,其指向下一条将要执行的机器语言指令。
每当一函数调用另一函数时,会在被调用函数的栈帧中保存这些寄存器的副本,以便函数返回时能为函数调用者将寄存器恢复原状。

参考书籍:linux/unix编程手册

本文探讨了函数调用和返回如何导致栈的线性增长和收缩,详细介绍了栈指针的作用,以及每次函数调用时栈帧的分配与回收过程。此外,还解释了内核栈在系统调用中的作用,以及用户栈帧包含的信息,如实参、局部变量和调用链接。
2658

被折叠的 条评论
为什么被折叠?



