復合型別的位元組對齊

2021-08-09 00:21:17 字數 1020 閱讀 7095

聯合體、結構體、class 的大小

對於復合型別,union、struct、class的對齊方式為成員中最大的成員對齊方式。

union 聯合體:聯合體的大小取決於它所有成員中占用空間最大的乙個成員大小

例子:union t1

;union t2

;在t1中,對齊方式是double型的8個位元組,所以sizeof(t1)=8;

在t2中,對齊方式是int型的4個位元組,buf[11]未對齊,最小為12,所以sizeof(t2)=12;

也可以指定對齊方式:

#pragma pack(2)

union t1

;union t2

;則在t1中,對齊方式是2個位元組,所以最大為sizeof(double),sizeof(t1)=8;

則在t2中,對齊方式是2個位元組,buf[11]未對齊,最小為12,所以sizeof(t2)=12;

class 、struct:占用空間最大成員為對齊方式,占用空間大小為所有成員占用空間大小的和

例子:struct t1

;union t2

;在t1中,對齊方式是double型的8個位元組,所以b也是8個位元組,但他是int型別,多的4個位元組可以給c使用,所以sizeof(t1)=8+8+8=24;

注意:在32位的linux系統中,位元組對齊方式最大為4個位元組,所以a分配4個位元組,b分配8個位元組,c分配4個位元組,sizeof(t1)=4+8+4=16;即使使用#pragma pack()設定對齊方式》4,也會按4進行位元組分配。

在t2中,對齊方式是int型的4個位元組,buf[11]未對齊,最小為12,所以sizeof(t2)=12+4=16;

也可以指定對齊方式:

#pragma pack(2)

union t1

;union t2

;則在t1中,對齊方式是2個位元組,sizeof(t1)=8+4+2=14;

則在t2中,對齊方式是2個位元組,buf[11]未對齊,最小為12,所以sizeof(t2)=12+4=14;

位元組順序 位元組對齊

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

位元組順序 位元組對齊

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

位元組對齊 8位元組對齊

參考博文 參考1 參考2 參考3 在記憶體管理中經常使用位元組對齊來管理分配的記憶體。1 原理 2 演算法 2.1unsigned intcalc align unsigned int n,unsigned align 2.2 更好的演算法 unsigned intcalc align unsign...