堆疊的生長方向

2021-07-08 15:34:19 字數 956 閱讀 7673

堆疊的生長方向從最本質的理解是堆疊入棧方向是從高位址向位址還是低位址向高位址。

從高位址向低位址生長一般叫做向下生長,也叫作逆向生長。

從低位址向高位址生長一般叫做向上生長,也叫作正向生長。

一般來說堆疊是逆向生長的。

51微控制器的堆疊生長方向為正向生長,因為執行push指令時先將sp的值加1再將指定的8位資料單元的內容入棧。

80x86微機的堆疊生長方向為逆向生長,因為執行push指令時先將sp的值減2再將指定的16位資料單元內容入棧。高位元組放高位址,低位元組放低位址(小端模式)。

stm32的堆疊生長方向是逆向生長

以下來自網友的測試**本人在pc機上執行,結果跟80x86一致。**的原理是利用遞迴函式兩次分配給變數的位址的不同來區別堆疊的生長方向。

#include static int stack_dir = 0; 

static void find_stack_direction (void)

else

} void main(void)

執行結果如下:

1. 80x86系統堆疊逆向生長

2. 陣列,字串內部資料位址按順序增長

關於堆疊生長方向的疑問?

os stk growth巨集的目的就是用來標示當前堆疊是向上還是向下生長的,這個巨集理解沒問題 但是當對應上ptos pbos時,我就疑惑了,倆個引數分別對應的是棧頂和棧底指標,當棧初始化為空的時候,這倆個位址應該相等,而在ucos裡面初始化idle任務時,當os stk growth 1時 堆疊...

棧生長方向的定義與CPU的棧生長方向

51的棧是向高位址增長,intel 的8031 8032 8048 8051系列使用向高位址增長的堆疊 但同樣是intel 在x86系列中全部使用向低位址增長的堆疊。其他公司的cpu中除arm的結構提供向高位址增長的堆疊選項外,多數都是使用向低位址增長的堆疊。在沒有mmu的時代,為了最大的利用記憶體...

把大端 小端與堆 棧的生長方向聯絡起來記憶

對於大端 小端的區別,可能看資料的時候確實理解了,但過段時間就搞混了 高位低位址 低位高位址 高位高位址 低位低位址.是不是看起來就好頭大,哪個對應哪個啊。其實可以把大小端與堆疊聯絡起來記憶,雖然兩者講的不是乙個粒度的,但大小端模式裡高低位的存放與堆和棧的生長方向有乙個共同點,它們都存在乙個資料存放...