大端模式,小端模式,位元組對齊 about C

2021-06-28 15:10:13 字數 1091 閱讀 6968



大端模式:資料的低位儲存在記憶體的高位址中,而資料的高位儲存在記憶體的低位址中,這種儲存模式就類似把資料當做字串順序處理,例如:資料中兩個位元組按順序為:fe 10 ,它表示的乙個數就是0xfe10。換句話說:記憶體的低位址存放著資料高位;

小端模式:資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址中,這種儲存方式就是將位址的高低和資料的位結合起來,前面的例子按照小端模式表示,應該為:0x10fe。換句話說:記憶體的低位址存放著資料低位。

例如 char p[2];,它用大端模式表示乙個數的計算方式為:

unsigned int  result =p[0];

result =(result <<8)|p[1];

用小端模式表示乙個數的計算方式為:

unsigned int  result =p[0];

result =(p[1]<<8)|result;

現代計算機

中記憶體空間都是按照byte

劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。

各個硬體平台對儲存空間的處理上有很大的不同。一些平台對某些特定型別的資料只能從某些特定位址開始訪問。比如有些架構的cpu在訪問乙個沒有進行對齊的變數的時候會發生錯誤,那麼在這種架構下程式設計必須保證位元組對齊.其他平台可能沒有這種情況,但是最常見的是如果不按照適合其平台要求對資料存放進行對齊,會在訪問效率上帶來損失。比如有些平台每次讀都是從偶位址開始,如果乙個int型(假設為32位系統)如果存放在偶位址開始的地方,那麼乙個讀週期就可以讀出這32bit,而如果存放在奇位址開始的地方,就需要2個讀週期,並對兩次讀出的結果的高低位元組進行拼湊才能得到該32bit資料。

1) 結構體變數的首位址能夠被其最寬基本型別成員的大小所整除;

2) 結構體每個成員相對於結構體首位址的偏移量都是成員大小的整數倍,如有需要編譯器會在成員之間加上填充位元組;例如上面第二個結構體變數的位址空間。

3) 結構體的總大小為結構體最寬基本型別成員大小的整數倍,如有需要編譯器會在最末乙個成員之後加上填充位元組。例如上面第乙個結構體變數。

小端模式和大端模式 大端模式和小端模式

0x123456在記憶體中的儲存方式 大端模式 低位址 小端模式 低位址 不難看出大端模式比較符合人的直觀認識 1.一開始是由於不同架構的cpu處理多個位元組資料的順序不一樣,比如x86的是小段模式,keil c51是大端模式。但是後來網際網路流行,tcp ip協議規定為大端模式,為了跨平台通訊,還...

大端模式 小端模式

大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 小端模式,是指資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址中,這種儲存模式將...

大端模式小端模式

大端 和 小端 可以追溯到1726年的jonathan swift的 格列佛遊記 其中一篇講到有兩個國家因為吃雞蛋究竟是先打破較大的一端還是先打破較小的一端而爭執不休,甚至爆發了戰爭。1981年10月,danny cohen的文章 論聖戰以及對和平的祈禱 on holy wars and a ple...