常常两两相对的东西,整一起后有点记不住,就写下来。
cpu.h中有宏定义使用哪种栈。
#define OS_STK_GROWTH 1 /* Stack grows from HIGH to LOW memory on ARM */
栈的四种
满栈:"满"字表示栈是满的,没有空位,所以栈指针指向栈的最后一个元素。我们入栈时要先移动SP再存数据,出栈时先取数据SP指针再移动。
空栈:"空"字表示栈是有个空位的。所以栈指针指向栈的最一个元素后面的第一个空位。我们入栈时直接存入数据,再移动SP。出栈时,先移动SP再取出数据。
増栈:"増"字表示往地址较大的方向。所以,栈底在低内存地址处,入栈时候的栈指针SP向内存地址较大的方向移动。
减栈:"减"字即减小,表示往地址较小方向。栈底在高内存地址处,入栈时指针SP向内存底子较小的方向移动。
表格表示:
类型 | SP指针 | 存数据 | 取数据 |
---|---|---|---|
满栈 | SP指向满栈(最后一个元素) | 先移动再存放 | 直接取数据后移动 |
空栈 | SP指向空位(最后元素的后一个空位) | 直接存放后移动 | 先移动再取 |
类型 | 栈底 | 栈指针移动方向 |
---|---|---|
増栈 | 低内存地址 | 栈指针移动方向为地址增加方向 |
减栈 | 高内存地址 | 栈指针移动方向为地址减小方向 |
在ARM中一般为满减栈