arm堆疊的增長方式

2021-04-29 00:44:49 字數 1072 閱讀 9070

堆疊是一種資料結構,按先進後出(first in last out,filo)的方式工作,使用乙個稱作堆疊指標的專用暫存器指示當前的操作位置,堆疊指標總是指向棧頂。

當堆疊指標指向最後壓入堆疊的資料時,稱為滿堆疊(full stack),而當堆疊指標指向下乙個將要放入資料的空位置時,稱為空堆疊(empty stack)。

同時,根據堆疊的生成方式,又可以分為遞增堆疊(ascending stack)和遞減堆疊(decendingstack),當堆疊由低位址向高位址生成時,稱為遞增堆疊,當堆疊由高位址向低位址生成時,稱為遞減堆疊。這樣就有四種型別的堆疊工作方式,arm 微處理器支援這四種型別的堆疊工作方式,即:

◎ full descending 滿遞減堆疊

堆疊首部是高位址,堆疊向低位址增長。棧指標總是指向堆疊最後乙個元素(最後乙個元素是最後壓入的資料)。

arm-thumb過程呼叫標準和arm、thumb c/c++ 編譯器總是使用full descending 型別堆疊。

◎ full ascending 滿遞增堆疊

堆疊首部是低位址,堆疊向高位址增長。棧指標總是指向堆疊最後乙個元素(最後乙個元素是最後壓入的資料)。

◎ empty descending 空遞減堆疊

堆疊首部是低位址,堆疊向高位址增長。棧指標總是指向下乙個將要放入資料的空位置。

◎ empty ascending 空遞增堆疊

堆疊首部是高位址,堆疊向低位址增長。棧指標總是指向下乙個將要放入資料的空位置。

堆疊型別 入棧指令 出棧指令

full descending stmfd (s***b) ldmfd (ldmia)

full ascending stmfa (stmib) ldmfa (ldmda)

empty descending stmed (s***a) ldmed (ldmib)

empty ascending stmea (stmia) ldmea (ldmdb)

例子:stmfd r13!, ; push onto a full descending stack

ldmfd r13!, ; pop from a full descending stack.

ARM堆疊方式

當堆疊指標指向最後壓入堆疊的資料時,稱為滿堆疊 full stack 而當堆疊指標指向下乙個將要放入資料的空位置時,稱為空堆疊 empty stack 同時,根據堆疊的生成方式,又可以分為遞增堆疊 ascending stack 和遞減堆疊 decendingstack 當堆疊由低位址向高位址生成時...

ARM堆疊方式

當堆疊指標指向最後壓入堆疊的資料時,稱為滿堆疊 full stack 當堆疊指標指向下乙個將要放入資料的空位置時,稱為空堆疊 empty stack 同時,根據堆疊的生成方式,又可以分為遞增堆疊 ascending stack 和遞減堆疊 decendingstack 當堆疊由低位址向高位址生成時,...

vector的capacity增長方式

vector的capacity增長方式 vector的capacity 呼叫返回vector中最大能夠儲存的元素個數,也即在下一次需要擴充容量之前能容納的元素個數。reserve會使容器在必要的時候增長,以便容納制指定數目的元素。例程 include include using namespace ...