sizeof计算联合体大小

来源:互联网 发布:三体电影跳票知乎 编辑:程序博客网 时间:2024/06/06 03:10

引言:本篇文章有一部分是在sizeof计算结构体大小的基础上进行说明的

1.联合体union特性

  • 联合体所有成员变量共享内存,相对于联合体首地址偏移量都为0
  • 同一时间只能存储1个被选择的变量,对其他成员变量赋值会覆盖原变量

2.联合体大小计算准则

  • 联合体大小要至少能容纳最大的成员变量
  • 联合体大小要是所有成员变量类型大小的整数倍

3.例子

typedef union u{      char a;    int b[5];    double c;    int d[3];     }U;  typedef struct s    {         int  e;        double f;           short g;                U h;              char i[2]; }S;   
  • U大小至少要容纳最大的b[5]=4*5=20字节,同时要是变量类型最大值得整数倍,即sizeof(double)=8的整数倍,所有sizeof(U)=24
  • s的大小计算需要看上一篇关于结构体大小的计算的文章sizeof计算结构体大小,联合体的自身对齐值为成员变量的最大对齐值,也就double的自身对齐值8,所以s得大小为0+4+4+8+2+6+24+2+6=56
3 0
原创粉丝点击