1 第一點,先要明白乙個,就是系統在申請記憶體的時候,是從高位址到低位址還是從低位址到高位址。
先用下面乙個簡單的程式來判斷申請的記憶體位址順序問題。下面是乙個典型的記憶體結構圖。
我們用下面這個程式來檢驗:
#include
intmain
()
輸出結果是:
可以看出,棧空間的申請是從高到低的。
2 有了上面的概念後,我們開始進行大端小端的分析。
先引入一則關於大端和小端的故事: 端模式(endian)的這個詞出自jonathan swift書寫的《格列佛遊記》。這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為big endian,從尖頭開始將雞蛋敲開的人被歸為littile endian。小人國的內戰就源於吃雞蛋時是究竟從大頭(big-endian)敲開還是從小頭(little-endian)敲開。在計算機業big endian和little endian也幾乎引起一場戰爭。在計算機業界,endian表示資料在儲存器中的存放順序。
簡單來說,大端就是將高位位元組放到低位位址空間裡,小端就是將高位位元組放到高位位元組。
那麼如何檢測乙個系統是大端還是小端,我們可以用下面的**:
#include
//判斷作業系統是大端還是小端
bool
checkendian();
my t;
t.a=1;
return(t.b==1);
}int
main
()
結果輸出是1,說明是小端的,具體分析如圖:
判斷系統CPU是大端還是小端
所謂的大端小端就是cpu在儲存資料的時候是從高位址開始儲存還是低位址開始儲存。例如在sizeof int 2的系統中,1 2 8 1 512 513,我們把這個值賦值給int ntemp 1 2 8 我們假定系統分配給變數ntemp的位址空間為 0x0000ff08到0x0000ff09,那麼0x0...
如何判斷機器是大端還是小端
這是一篇沒多少新意的文章,對big endian和little endian熟悉的人沒必要看,免得浪費時間。1 概念 所謂大端小端,指的是對於多位元組的資料型別 比如,int 在記憶體中存放的位元組順序。小端是指低位址的位元組存放的是資料的低位,高位址位元組存放的是資料的高位。大端是指低位址位元組存...
golang判斷系統是大端還是小端儲存
在看goim源 時看到這樣一段 func islittleendian bool 這段 是為了判斷系統是大端儲存還是小端儲存。如何區分大端儲存還是小端儲存?以0x01020304為例子 大端 16進製制 01 02 03 04 小端 16進製制 04 03 02 01 那麼來分析一下上面的 func...