結構體預設對齊方式
在預設對齊方式下,結構體成員的記憶體分配滿足下面三個條件
1.第乙個成員的位址和結構體的首位址相同,即偏移量為0。
2.結構體每個成員位址相對於結構體首位址的偏移量(offset)是該成員大小的整數倍,如果不是則編譯器會在成員之間新增填充位元組(internal adding)。
3.結構體總的大小是其成員中最大基本型別大小整數倍,如果不是編譯器會在其末尾新增填充位元組(trailing padding)。
offsetof函式可以得到結構體成員相對於該結構體首位址的偏移量
struct s0//sizeof(s0)=1
struct s1; //sizeof(s1)=24
struct s2; //sizeof(s2)=16
struct s3;//sizeof(s3)=24
struct s4;//sizeof(s4)=11
sizeof( struct ) = offsetof( last item ) + sizeof( last item ) + sizeof( trailing padding )
union型別滿足1和3,所有成員偏移量都為0;
union和struct的大小計算
宣告 整理自網路。規則 1,對於union,對齊的大小是最大的基本元素的對齊大小 物件的大小必須是該基本元素大小的整數倍 2,對於struct,對齊的大小也是最大的基本元素的對齊大小,物件的大小需要考慮元素的對齊,並且需要是最大基本元素的整數倍 同時有 pragma pack修飾的情況,關於stru...
union和struct的大小計算
規則 1,對於union,對齊的大小是最大的基本元素的對齊大小 物件的大小必須是該基本元素大小的整數倍 2,對於struct,對齊的大小也是最大的基本元素的對齊大小,物件的大小需要考慮元素的對齊,並且需要是最大基本元素的整數倍 同時有 pragma pack修飾的情況,關於struct請詳細參考另外...
union和struct的區別 大小端
struct中的每個域在記憶體中都獨立分配空間 union只分配最大域的空間,所有域共享這個空間 include structa union b int main union的使用受系統大小端的影響 c.c 1為小端,0為大端 剖析 little endian模式的cpu對運算元的存放方式是從低位元...