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

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

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

  下面結合幾張圖說明一下。

 

作者: 蟬蟬

請尊重作者勞動成果,轉載請在標題註明“轉載”字樣,並標明原文鏈接:

http://www.cnblogs.com/chanchan/p/7820508.html

 

  假設機器爲32位的,爲方便表示,下文的數據都以16進制來表示。有一個數爲0x12345678,在大端、小端模式下分別以下面兩張圖的形式存儲:

                                     

  可以看出,大端是高位存儲在低地址,低位存儲在高地址,而小端正相反,高位存儲在高地址,低位存儲在低地址。仔細觀察一下,其實大端更符合人類的書寫方式;人手動在紙上寫出來0x12345678,一般都是從左到右,先寫1,再寫2,依次類推,最後寫8,大端也是這樣,從初始的存儲位置,先存入12,再存入34,最後存入78;對人類來說,小端就有點繞了,要畫出其存儲結構,先要計算下總共佔幾個字節,然後從初始地址往上數幾個字節,再由上到下分別寫12、34、56、78。對上面的兩個圖分別加個箭頭可以更清楚的說明人一般的思維過程,見下面兩圖:

                              

也就是說,可以看成大端由下往上書寫,或低地址往高地址書寫;小端相反,由上往下書寫,或高地址往低地址書寫。到這裏,是不是感覺跟棧和堆的生長方向有點相像了呢?堆和棧的生長方向見下圖:

  即棧是由上往下生長的,堆相反,由下往上生長。這個一般很好記,兩個對着生長,可以提高內存的利用率。

  雖然堆和棧與大端小端不是一回事情,但可以把大端小端與堆棧聯繫起來記憶,大端對應堆,由下往上生長;小端對應棧,由上往下生長。下次再遇到大小端時,是不是可以很快分清哪個是哪個了?

轉載: https://www.cnblogs.com/chanchan/p/7820508.html

發佈了11 篇原創文章 · 獲贊 38 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章