结构体和共用体的内存对齐

编译器按照成员列表的顺序一个接一个地给每个成员分配内存。

只有当存储成员时需要满足正确的边界对齐要求时,成员时间才可能出现用于填充的额外内存空间。

系统禁止编译器在一个结构的起始位置跳过几个字节来满足边界对齐要求,因此所有结构的起始位置必须是结构中边界要求最严格的数据所要求的位置。

这段话来自 C和指针,意思是存储结构体变量的地址必须是结构体最长元素的整数倍。

结构体嵌套结构体时的内存对齐还是以最长元素作为边界对齐要求,而不是以结构体变量的长度:

可以发现,结构变量的首地址是4的整数倍,而不是的整数倍。

 

联合体的对齐方式和结构体一样

联合体的长度是最长成员的长度

如果联合体的成员是数组并且数组的长度是联合体中是最长的,那么联合体的长度是数组的长度,而不是单个数组元素的长度;联合体的成员是结构体变量并且结构体的长度是联合体中是最长的,那么联合体的长度是结构体变量的长度而不是结构体成员变量的长度。

长度12

结构体变量的长度为12个字节,在联合体成员中是最长的,所以联合体的大小12个字节。按照4对齐(int型)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值