對於大端、小端的區別,可能看資料的時候確實理解了,但過段時間就搞混了;高位低地址、低位高地址、高位高地址、低位低地址...是否是看起來就好頭大,哪一個對應哪一個啊。其實能夠把大小端與堆棧聯繫起來記憶,雖然二者講的不是一個粒度的,但大小端模式裏高低位的存放與堆和棧的生長方向有一個共同點,它們都存在一個數據存放順序的問題。html
下面結合幾張圖說明一下。3d
做者: 蟬蟬htm
請尊重做者勞動成果,轉載請在標題註明「轉載」字樣,並標明原文連接:blog
http://www.cnblogs.com/chanchan/p/7820508.html內存
假設機器爲32位的,爲方便表示,下文的數據都以16進制來表示。有一個數爲0x12345678,在大端、小端模式下分別如下面兩張圖的形式存儲:im
能夠看出,大端是高位存儲在低地址,低位存儲在高地址,而小端正相反,高位存儲在高地址,低位存儲在低地址。仔細觀察一下,其實大端更符合人類的書寫方式;人手動在紙上寫出來0x12345678,通常都是從左到右,先寫1,再寫2,依次類推,最後寫8,大端也是這樣,從初始的存儲位置,先存入12,再存入34,最後存入78;對人類來講,小端就有點繞了,要畫出其存儲結構,先要計算下總共佔幾個字節,而後從初始地址往上數幾個字節,再由上到下分別寫十二、3四、5六、78。對上面的兩個圖分別加個箭頭能夠更清楚的說明人通常的思惟過程,見下面兩圖:數據
也就是說,能夠當作大端由下往上書寫,或低地址往高地址書寫;小端相反,由上往下書寫,或高地址往低地址書寫。到這裏,是否是感受跟棧和堆的生長方向有點相像了呢?堆和棧的生長方向見下圖:db
即棧是由上往下生長的,堆相反,由下往上生長。這個通常很好記,兩個對着生長,能夠提升內存的利用率。img
雖然堆和棧與大端小端不是一回事情,但能夠把大端小端與堆棧聯繫起來記憶,大端對應堆,由下往上生長;小端對應棧,由上往下生長。下次再遇到大小端時,是否是能夠很快分清哪一個是哪一個了?時間