大小端模式,棧的生長方向和記憶體的存放方向

2021-08-11 21:05:55 字數 720 閱讀 8589

/*棧的生長方向和記憶體的存放方向

棧的開口向下,高位址在上,低位址在下

記憶體的存放方向:自下向上

*/#define _crt_secure_no_warnings

#include 

#include 

#include 

//1. 棧的生長方向

void test01()  

//2. 記憶體生長方向(小端模式)

void test02()  

void main()   

int main( void )

本例是測大小端用的,兩個printf輸出為:小端兩個printf都為0x22,

大端:printf("*(char*)&a = 0x%x\n", *(char*)&a ); 0x11

printf("(char)a = 0x%x\n", (char)a ); 0x22 short強轉位char,保留的是資料的最低8位,非最低記憶體位址的值

uint64 test64 = 0x12345678;

uint32 test32 = test64; /* 不管是大端還是小端,test32的值都是0x12345678 */

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

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

堆疊的生長方向

堆疊的生長方向從最本質的理解是堆疊入棧方向是從高位址向位址還是低位址向高位址。從高位址向低位址生長一般叫做向下生長,也叫作逆向生長。從低位址向高位址生長一般叫做向上生長,也叫作正向生長。一般來說堆疊是逆向生長的。51微控制器的堆疊生長方向為正向生長,因為執行push指令時先將sp的值加1再將指定的8...

棧的生長方向以及棧中的陣列

棧的生長方向分為向上生長和向下生長。看下圖 假定有兩個變數a和b,a先入棧,b 棧。如果a的記憶體位址大於b的記憶體位址,那麼棧的開口向下,反之棧的開口向上。看下面的 int a 10 int b 10 cout a b endl 我這裡是看口向下 debug 但release下棧看口向上生長 那麼...