union和struct的大小計算

2021-08-11 04:24:02 字數 630 閱讀 2879

規則:

1,對於union,對齊的大小是最大的基本元素的對齊大小;物件的大小必須是該基本元素大小的整數倍;

2,對於struct,對齊的大小也是最大的基本元素的對齊大小,物件的大小需要考慮元素的對齊,並且需要是最大基本元素的整數倍;同時有#pragma pack修飾的情況,關於struct請詳細參考另外乙個帖子。

3,這裡所說的struct和union的對齊,是指其作為其他複雜物件中的元素的時候要求的對齊,對於本身大小的計算並沒有關係。本身的大小只和其所包含的基本元素的對齊有關係。

例子一:

union u1

;所以該union的對齊大小是4個位元組;大小為大於等於max(9,4)=9並為4的整數倍,所以是12位元組。

例子二:

union u1_another

;所以該union的對齊大小是8個位元組,大小是大於等於9並為8的整數倍,即為16位元組;

例子三:

union u2

;所以該union的對齊大小是8個位元組,大小是16;

例子四:

struct s1

所以該結構體是8位元組對齊,大小為24個位元組;

例子五:

struct s2

;所以該結構體的對齊大小是8位元組,大小是40位元組;

struct和union的大小

結構體預設對齊方式 在預設對齊方式下,結構體成員的記憶體分配滿足下面三個條件 1.第乙個成員的位址和結構體的首位址相同,即偏移量為0。2.結構體每個成員位址相對於結構體首位址的偏移量 offset 是該成員大小的整數倍,如果不是則編譯器會在成員之間新增填充位元組 internal adding 3....

union和struct的大小計算

宣告 整理自網路。規則 1,對於union,對齊的大小是最大的基本元素的對齊大小 物件的大小必須是該基本元素大小的整數倍 2,對於struct,對齊的大小也是最大的基本元素的對齊大小,物件的大小需要考慮元素的對齊,並且需要是最大基本元素的整數倍 同時有 pragma pack修飾的情況,關於stru...

union和struct的區別 大小端

struct中的每個域在記憶體中都獨立分配空間 union只分配最大域的空間,所有域共享這個空間 include structa union b int main union的使用受系統大小端的影響 c.c 1為小端,0為大端 剖析 little endian模式的cpu對運算元的存放方式是從低位元...