位段
知识点概要:
- 什么是位段
- 位段的内存分配
- 位段的跨平台问题
- 总结
什么是位段
位段的声明和结构是类似的,有两个不同:
- 位段的成员必须是 int 、unsigned int、signed int 。
- 位段的成员名后面有一个冒号和数字。(这个数字用来限定这个成员所占内存的bit位)
例1:
struct S1
{
int _a : 2;
int _b : 5;
int _c : 10;
int _d : 30;
};
printf("%d\n", sizeof(S1)); // 8
解析:
_a 占了2位,_b占了5位,_c占了10位,加起来用了17位,剩余15位,不够存放_d的30位,所以重新开辟一个的int型(32位),并从起始位置开始存放_d。如下图所示:
所以,该位段的大小为 2int = 8字节
位段的内存分配
- 位段的成员可以是 int、unsigned int、signed int 或者是 char (属于整型家族)类型。
- 位段的空间上是按照需要以4个字节(int)或者1个字节(char)的方式来开辟的。
- 位段涉及很多不确定因素,位段是不跨平台的,注