struct和union的大小

2021-07-22 17:18:38 字數 705 閱讀 1009

結構體預設對齊方式

在預設對齊方式下,結構體成員的記憶體分配滿足下面三個條件

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對運算元的存放方式是從低位元...