山高疑日近,海阔觉天低

struct中的位域

位域声明

位域的主要作用是节省存储空间,位域的声明在结构体内有以下形式,

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

赞(1) 打赏
未经允许不得转载:Mr.Zhang » struct中的位域

你的打赏是我的动力

登录

找回密码

注册