【C/C++】位段

零.导言

        位段,对初学者来说是一个相对陌生的概念。今天,我将简单的介绍位段的概念。

先说结论:位段和结构体是类似的,并且在空间储存上战友,但同时存在难以跨平台的弊端。


一.位段的声明

        我们来简单看一下结构体和位段的区别:

//这是结构体

struct SeqList
{
    int arr*;
    int size;
    int capacity;
};

        以上是结构体。

//位段

struct A
{
    int _a:2;
    int _b:4;
    int _c:8;
    int _d:12;
};

        以上是位段。

        可以看出,结构体和位段是极为相似的,其中一个区别在于位段在变量名后加了一个冒号和一个数字,用于确定开辟的空间大小。


二.位段的内存分配

        关于位段的内存分配,有几点要特别注意,和结构体不同:

  1.          位段的成员只能是 int, unsigned int,signed int,char等类型。
  2.          位段的空间上是按照需要以4个字节(int)或者1个字节(char)的方式来开辟的
  3.          位段涉及很多不稳定因素,难以跨平台。

        从此可以看出:位段可以精细的控制变量所用空间大小,有占用空间小的优点。


三.位段的跨平台问题

  1.         int 位段被当成有符号数还是无符号数是不确定的。
     
  2.         位段中最大位的数目不能确定。(比如16位机器最大位是16,32位机器最大位是32)
     
  3.         位段中的成员在内存中从左向右分配,还是从右向左分配,标准尚未定义。
     
  4.         当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃剩余的位还是利用,这是不确定的。

        综上所述:当所写程序涉及跨平台时,还是推荐使用位段而非结构体。


四.相关链接

        【C/C++】结构体的定义-优快云博客


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值