指定位元組對齊方式

2022-05-02 21:33:12 字數 1086 閱讀 4117

今天看到記憶體位元組對齊的東西,就認真的看了起來,一點睡意都沒有了。

對於記憶體位元組對齊

#pragma pack(push,n)

表示一下結構或類成員以n位元組方式對齊,注意並不是每個成員都是占用n個位元組,而是取min(成員型別,n)。記住這一點就不怕再算錯了。

#pragma pack()

表示記憶體位元組對齊方式到此結束。

下面寫寫幾個例子:

struct a

結構體a占用的位元組數計算方法如下:int =4,存放在[0]~[3] char 存放在[4],short佔兩個位元組,所以char後面空乙個字元,short放在[6]~[7] 共占用8個位元組的記憶體。sizeof(a)=8.

struct b

結構體b占用的位元組數計算方法如下:char =1,存放在[0], int=4,所以char後面要空出來3個位元組,然後在存放int型別,即存放在[4]~[7],short佔兩個位元組,所以結構體共佔十個位元組,但是10不是最大型別(佔4個位元組)的整數倍10/4,距離10最近的整數倍是12,所以sizeof(b)=12. 

下面來看一下指定位元組對齊的計算方式

#pragma pack(push,4)

struct a

#pragma pack()

一定要記住min(成員型別,n),使用公式可以計算得到int =4,char=1(但是後面的short比char大,所以一後面的為準。char=1然後空出1個位元組,後面再放short)short=2。所以sizeof(a)=8。

#pragma pack(push,4)

struct b

#pragma pack()

按照上面的計算方法得出sizeof(b)= 12。

#pragma pack(push,2)

struct a

#pragma pack()

按照上面的計算方法得出sizeof(b)= 8。

總結:<1>公式min(成員型別,n)

<2>看下乙個成員型別是否比自己少,沒有的話按照下乙個計算。

有關結構體位元組對齊方式

今天偶然碰到對如下兩個結構體進行sizeof 運算 struct example1 struct example2 在計算機上執行後得到分別為24,16,網上查了一下,得到如下理解 1.計算方式 sizeof struct offsetof last item sizeof last item si...

位元組順序 位元組對齊

一.位元組順序的產生 在計算機中,資料是以位元組為單位存放的,而c語言中只有char才是乙個位元組,其他如int,float都是大於乙個位元組,所以就存在將資料按怎樣的順序存放的問題。一般有大端序和小端序兩種方式,特殊的還有混合序,也就是兩種存放方式同時存在於乙個計算機系統中。上面講的都是主機位元組...

位元組順序 位元組對齊

一.位元組順序的產生 在計算機中,資料是以位元組為單位存放的,而c語言中只有char才是乙個位元組,其他如int,float都是大於乙個位元組,所以就存在將資料按怎樣的順序存放的問題。一般有大端序和小端序兩種方式,特殊的還有混合序,也就是兩種存放方式同時存在於乙個計算機系統中。上面講的都是主機位元組...