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.整个结构体的总大小为最宽基本类型成员大小的整数倍


你可能感兴趣的:(C数据类型对齐规则包含位域)