今天看到記憶體位元組對齊的東西,就認真的看了起來,一點睡意都沒有了。
對於記憶體位元組對齊
#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都是大於乙個位元組,所以就存在將資料按怎樣的順序存放的問題。一般有大端序和小端序兩種方式,特殊的還有混合序,也就是兩種存放方式同時存在於乙個計算機系統中。上面講的都是主機位元組...