二、資料的排列方式
總結在計算機系統中,資料是以位元組為單位的,每乙個位址單元都對應著乙個位元組,乙個位元組為8bit,而且多位元組的資料在記憶體裡一定是佔連續的幾個位元組的,這就意味著位數大於8位的處理器,由於暫存器寬度大於乙個位元組,就變存在著多個位元組的安排問題。因此就導致了大端儲存模式和小端儲存模式。
對於乙個4位元組的int型別:大端模式是指資料的高位元組,儲存在記憶體的低位址中,而資料的低位元組,儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:位址由小向大增加,而資料從高位往低位放;
同樣對於乙個4位元組的int型別:小端模式是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中。
很顯然,就讀寫方式來看,大端的儲存模式肯定是更符合人們的閱讀的,那為什麼還需要小端儲存模式呢?
那是因為小端儲存模式將位址的高低和資料位權有效地結合起來,高位址部分權值高,低位址部分權值低,和我們的邏輯方法一致。
舉個栗子:假如我們的cpu每一次只能處理乙個8位的二進位制運算,這個時候要計算2個int型別的加法運算,那麼計算機首先要計算的應該是最低位的8位資料,再到次低位,直到計算完畢。而這種小端的儲存模式是更符合計算機的處理的!
現代計算機通常都是以字位元組編址的,也就是說乙個位元組對應乙個位址。
當然也可以按照字、半字、位元組定址。
以乙個儲存字長為32位、每次訪存只能讀寫乙個字的cpu為例!
1位元組 = 8bit
儲存字長 = 32bit,即1字 = 32bit,半字 = 16bit。
0號半字 : 位元組1 + 位元組2
1號半字 : 位元組3 + ---
2號半字 : 半字1
3號半字 : 半字2
所以編號位址為3的半字就是半字2所在位置
0號字:位元組1 + 位元組2 + 位元組3 + ---
1號字:半字1 + 半字2
2號字:半字3 + ---
所以編號位址為2的字就是 半字3起始位置 到 ---結束位置
同樣的邊界不對齊方式也是如此!這裡不再一一展開!
邊界對其和邊界不對齊的區別:
上面的例子中宣告了cpu每一次訪存只能讀寫乙個字為例,假設現在我們要儲存3個char型別(1位元組)的變數、3個short型別(2位元組)的變數、1個int型別(4位元組)的變數:
對於邊界對齊方式:
3個char分別放在位元組1、位元組2、位元組3的位置,最後---為空
3個short分別放在半字1、半字2、半字3的位置,最後---為空
i個int放在字1中
對於邊界不對齊方式:
3個char分別放在位元組1、位元組2、位元組3的位置,而第乙個半字分為兩部分 —— 半字1-1、半字1-2.
由於我們宣告了計算機每次訪存都只能讀寫乙個字,所以如果要讀取乙個short型別的資料:
對於邊界對齊:只需要訪存一次就可以將乙個short讀出來
對於邊界不對齊:需要兩次訪存才能將乙個short完整的讀出來
很顯然,邊界對齊方式是空間換時間的方式,儘管空間上有些浪費,但是在訪存效率上來說,是要比邊界不對齊的方式更快的!!
本文主要講述了資料在計算機內部的儲存和排列方式,水平尚淺,不當之處還請指正!
計算機中資料的儲存形式
在計算機中如何表示?8在計算機中表示為二進位制的1000,那麼 8怎麼表示呢?很容易想到,可以將乙個二進位制位 bit 專門規定為符號位,它等於0時就表示正數,等於1時就表示負數。比如,在8位機中,規定每個位元組的最高位為符號位。那麼,8就是00001000,而 8則是10001000。但是,隨便找...
資料在計算機中的儲存
首先,我們為什麼要知道這個呢?我們只需要知道這個東西怎麼用不就好了嗎?我想,你可能忽視了你還是乙個程式設計師。好了言歸正傳我們來講講計算機中資料的儲存方式。我們都知道在計算機中所有的資料是以二進位制的形式儲存的,那麼你們有沒有想過01這些資料是怎麼存在計算機當中的呢?不知道你們有沒有聽過乙個東西,叫...
負數在計算機中的儲存
問乙個基本的問題。負數在計算機中如何表示?舉例來說,8在計算機中表示為二進位制的1000,那麼 8怎麼表示呢?很容易想到,可以將乙個二進位制位 bit 專門規定為符號位,它等於0時就表示正數,等於1時就表示負數。比如,在8位機中,規定每個位元組的最高位為符號位。那麼,8就是00001000,而 8則...