常常兩兩相對的東西,整一起後有點記不住,就寫下來。
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中一般爲滿減棧