C/C++位域概念及位域并发修改问题

位域在C/C++中可以节省空间,但并发修改时可能引发线程安全问题。安全的并发修改包括:不同内存位置的位域与非位域对象、内嵌结构体中的位域、零长位域对象或非位域对象分割的位域。理解这些规则有助于编写线程安全的代码。
摘要由CSDN通过智能技术生成
    在计算机中,数据是以0和1两种形态进行表述的,而每个0和1都占据了一个位(bit)的大小,8个位(bit)可以组成一个字节(byte),一个字节就是计算机里数据类型的最小基本单位,如:char在32bit系统中大小为一个字节(byte)。但我们应该知道,虽然字节是最小的数据类型基本单位,但有时候我们或许是用不完这一个字节的,如:我们要表示一个开关量的时候,它就两种情况:0和1嘛,若我们申请了一个字节,那剩下的七个位岂不是浪费了?所以C中就有了位域(bit-field)的概念,后来C++为了支持底层编程也从C中继承来了这个概念(它属于固有的不可移植特性,不可移植特性指的是依赖于具体机器的特性)。

    位域的定义形式:变量名 : 具体大小,如: 

struct bf { 
    char a : 4; 
    char b : 4;
} 

上面例子的意思很简单:在结构体内定义了一个占四位的char类型变量a,以及另一个占四位的char类型变量b.我们可以用代码sizeof(bf)测试一下bf的大小,我们可以发现bf大小为1,而不是2,OK,看来这样确实可以节省空间。不过有时候位域的大小可不是简单地把所有位域声明的大小加起来哦,这还涉及到一个内存对齐的问题,这个问题留到以后说,目前只是先了解一下。还有一个问题需要注意一下,或许我们会注意到,a和b各占了四位,那加起来就刚好是一个char类型的大小咯?那是不是它们平分的是同一个字节呢?对于这个问题,以下代码可以检验:

#inc
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值