0
点赞
收藏
分享

微信扫一扫

c的位段问题

兵部尚输 2022-03-26 阅读 78
c语言

位段

位段的作用是节省内存空间,因为有的成员不需要那么大的空间,因此可以通过位段来节省空间

位段不会进行内存对齐

其实位段算是结构体,结构体实现了位段

位段的声明类似于结构体,有两个不同

位段的成员需要是 int、unsigned int、signed int 、char

位段的成员名后边有一个冒号和一个数字(比结构体成员多了冒号和数字),表示这个成员占多少个比特位(bit位)

位段的内存分配没有标准规定,一般情况下是,先开辟一块成员数据类型大小的空间,依次存放每个成员,直到这一块空间不够存放下一个成员了,会再开辟一块成员数据类型大小的空间,继续存放成员,依此类推

因为在非第一次开辟空间的时候,之前空间剩余的字节要不要被使用并没有规定,因此每个编译器可能会存在差异,因此位段也不具有跨平台性,也就是不具有可移植性

(VS编译器就不会使用之前空间剩余的字节)

位段的跨平台问题

1. int 位段被当成有符号数还是无符号数是不确定的。

2. 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成30,在16位机器会出问题。

3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。

4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃剩余的位还是利用,这是不确定的。

举报

相关推荐

0 条评论