位域声明
位域的主要作用是节省存储空间,位域的声明在结构体内有以下形式,
struct { type [member_name] : width ; };
以下表格描述了位域元素
元素 | 意义 |
---|---|
type | 可以是int,unsigned int等等,不可是数组 |
member_name | 成员变量名字 |
width | 位宽 |
关于struct占用空间,感觉sizeof(struct)=sum(width)/sizeof(type)+(无余数?0:sizeof(type));
struct st_mm { short i:15; short j:2; }; //占用 4B struct st_mm { short i:15; short j:1; }; //占用 2B struct st_mm { short i:15; short k; short j:1; }; //占用 6B struct st_mm { short i:17; short j:1; }; //编译不通过 应为i最大位16比特
struct内存占用
struct张勇空间规则:
①是成员类型最大的整数倍
②在内存的偏移地址必须是其滋生长度的整数倍
计算方式:(表面理解)
1.先找出最大的类型变量
2.在它之前的总内存必须和最大类型对齐(整数倍)
3.在它之后的总内存必须和最大类型对齐(整数倍)
struct st_mm { char b8; short bbb; char b10; }; //占用 6B 2+2+2 struct st_mm { char b8; short bbb;//内存开始地址必须是sizeof(bbb)的整数倍 char b10; int c; }; //占用 12B 4+4+4 b8与bbb 第一个4,b10第二个4