C数据类型对齐规则包含位域

C数据类型对齐规则包含位域

相关的操作:
#pragma pack(n) 设置为n字节对齐
#pragma pack(push) 保存当前的对齐字节数
#pragma pack(pop) 还原默认对齐字节数
vc默认8字节对齐

1.对于结构体的各个成员,第一个成员位于偏移为0的位置
2.对于结构体的以后的每个成员的开始偏移位置必须是MIN(#pragma pack()指定的数,这个数据成员的自身长度)的倍数
3.数据成员对齐完毕后,结构体或联合本身也要对齐,对齐按照pragma指定的数和结构体中最大数据成员长度中比较小的那个的倍数


有位域的对齐规则:

1.如果相邻位域字段类型相同,且其位宽之和小于类型的sizeof大小,则后面的字段将紧邻前一个字段存储,直到不能容纳为止
2.如果相邻位域字段类型相同,但其位宽之和大于类型的sizeof大小,则后面的字段将从新的存储单元开始,其偏移量为其类型大小
  的整数倍
3.如果相邻的位域字段的类型不同,则各编译器的具体实现有差异,VC6采取不压缩的方式,DEVC++采取压缩方式
4.如果位域字段之间穿插着非位域字段,则不进行压缩
5.整个结构体的总大小为最宽基本类型成员大小的整数倍


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值