前言
之前我对结构体内存分配的方式、对默认对齐数的指令修改做了详细的博客讲解,(C语言结构体详解 (2) 结构体内存对齐,默认对齐数,大家有兴趣的话可以去了解了解这方面的知识。
一. 什么是位段?
位段的声明和结构是类似的,有两个不同:
1.位段的成员必须是 int、unsigned int 或signed int 。
2.位段的成员名后边有一个冒号和一个数字,每个数字代表了各个成员变量在结构体中所占的内存大小,数字的单位是bit位。
struct D{
int _a:2;
int _b:5;
int _c:10;
int _d:30;
};
如上图代码,struct D就是位段类型的结构体,请大家猜一下,这个结构体的大小又占多少字节?
我们按照字面上的意思来判断,有四个整型变量,每个整型变量所对应的大小分别为2bit,5bit,10bit,30bit位,那么四个成员变量一共占47bi