关于栈指针的简单笔记

栈是包含数据的一块连续内存区域,SP(stack pointer)指向栈的顶部,栈的底部是一个确定后不可更改的地址,栈的大小在运行时被kernel动态调整,栈的POP和PUSH操作由CPU实现。

当调用一个函数的时候,一个逻辑栈帧(logical stack frame)被构造,函数退出时,这个逻辑栈帧就释放。一个逻辑栈帧包含指向函数的指针,包括函数里的局部变量,和可以恢复到上一个栈帧的数据等。

如果我们除了SP之外还有一个指向当前栈帧固定位置的指针,会使得很多操作变得方便,所以引入了FP(frame pointer)或者称作LB(local base pointer)。如果假设当前系统中栈是从高处往低处增长的,那么函数的参数在FP的正偏移处,函数里面的局部变量在FP的负偏移处。

当一个函数被调用的时候,它要做的第一件事情是:储存前一个FP。因为这样一来,可以在函数退出的时候将FP的值恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值