常常两两相对的东西,整一起后有点记不住,就写下来。
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中一般为满减栈