uion联合体占用的字节计算

union overlay

{
char letter;
int number;
};
union overlay ua;
ANSI C下 这里的ua 占多少字节?怎么计算?

联合体(union)
当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union);
1)联合体是一个结构;

2)它的所有成员相对于基地址的偏移量都为0;

3)此结构空间要大到足够容纳最"宽"的成员;

4)其对齐方式要适合其中所有的成员;

下面举例说明:

如联合体

1 union U
2 {
3 char s[9];
4 int n;
5 double d;
6 };

s占9字节,n占4字节,d占8字节,因此其至少需9字节的空间。然而其实际大小并不是9,

运算符sizeof测试其大小为16.这是因为这里存在字节对齐的问题,9既不能被4整除,

也不能被8整除。因此补充字节到16,这样就符合所有成员的自身对齐了。

从这里可以看出联合体所占的空间不仅取决于最宽成员,还跟所有成员有关系

即其大小必须满足两个条件:

1)大小足够容纳最宽的成员;

2)大小能被其包含的所有基本数据类型的大小所整除。

posted @ 2019-05-30 16:08  波特曼  阅读(1114)  评论(0编辑  收藏  举报