帶你徹底理解大端小端,結構體內存對齊

2021-10-09 18:22:29 字數 1094 閱讀 3668

因為現代pc大多採用小端位元組序,

小端位元組序又被稱為主機位元組序

大端位元組序也稱為網路位元組序。

判斷計算機是小端還是大端的核心點:

1、取出int型別低位元組存於char,對比取出的低位存放的資料跟整個int型別資料的值。

2、跟據聯合體特點,所有成員共享記憶體空間。

特別的:網路位元組序是大端模式。

#include

intmain()

system

("pause");

}union u

u;u.a =1;

if(u.b ==0)

else

if(u.b ==1)

}

結構體內存對齊簡單來說就是計算機會在底層以某種方式,對我們的結構體儲存的成員變數以某個大小為指標,進行位元組大小上乙個倍數的擴充。

位元組對齊主要是為了提高記憶體的訪問效率, 比如intel 32位cpu,每個匯流排週期都是從偶位址開始讀取32位的記憶體資料,如果資料存放位址不是從偶數開始,則可能出現需要兩個匯流排週期才能讀取到想要的資料,因此需要在記憶體中存放資料時進行對齊。

通常我們說位元組對齊很多時候都是說struct結構體的記憶體對齊,比如下面的結構體:

struct a
在32位機器上char 佔1個位元組,int 佔4個位元組,short佔2個位元組,一共占用7個位元組.但是實際真的是這樣嗎?我們先看下面程式的輸出:

#include

struct a

;int

main()

測試輸出的結果是a: 12, 比計算的7多了5個位元組。這個就是因為編譯器在編譯的時候進行了記憶體對齊導致的。

記憶體對齊主要遵循下面三個原則:

其實這裡有點不嚴謹,編譯器在編譯的時候是可以指定對齊大小的,#pragma pack(n) 實際使用的有效對齊其實是取指定大小和結構體自身大小的最小值,32位一般預設的對齊大小是4。

大端小端格式理解

所謂的大端模式,是指資料的低位儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中 所謂的小端模式,是指資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址中。為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組...

記憶體的大端小端儲存

只需要判斷低位址存放的是高位資料 大端儲存 還是低位資料 小段儲存 資料0x0a0b0c0d,位址0x1000,大端儲存為 不同的cpu處理記憶體資料的方式不同,以及cpu和網路處理資料的方式也可能不同,所以要指明大端還是小端。尤其是在做跨平台專案的時候。網路位元組序,是和大端系統一致。也就是網路上...

理解小端大端儲存模式

小端大端參考文章 位元組序 多位元組資料在記憶體中的儲存順序,分為 大端模式 和 小端模式 兩種儲存方法 小端模式 高位元組資料儲存在高位址 速記 小 小端 高 高位元組 高 高位址 大端模式 高位元組資料儲存在低位址 舉個例子 對於 32位整型資料 0x12345678,它在大端和小端兩種模式下是...