位段(节约内存),和王者段位联想记忆
位段是为了节约内存的。刚好和结构体相反。
那么什么是位段呢?我们现引入情景:我么如果要记录一个人是男是女,用数字0 1表示。我们发现只要一个bit内存就可以完成我们想要的情况。那么我们这时就可以用位段
位段的语法
后面的 1,4就是分配的比特数。变量占1bit,b变量占4bit。如果我们要详细说明语法,我们首先要了解它是增么分配类存的。
位段的内存分配(vs里面)
内存分配和前面的类型有关,a是char类型。所以要用char的一个字节来进行分配
那么会从右往左进行分配,a需要一个bit就分配1bit
然后继续分配b的
那么整个结构体内存就占1字节。如果是下面的情况:
那么a给了5bit,但是我们b无法在这个字节开辟内存了。所以跳到下个字节:
然后再从右到左开辟
那么就开辟好了,一共占2个字节。
我们以一个字节为单位是依据哪里来的呢?就是char来决定的,如果换成int,就要一次以4个字节就是32个bit来开辟内存。
我们要注意一个细节,前面的例子a,b存在一个字节里面是a,b都是char的情况下。所以我们为了保证位段开辟内存的稳定,我们尽量要用同一个内型的变量开辟。
那么语法我们自然而然的就懂了。什么时候用char,什么时候用int。如果是开头的只用1个bit我们就用char,最后产生1字节的内存消耗。
位段的缺点
因为位段以一个类型单位字节为单位在内存中规划,不同编译器的规划方向不同,VS是从右向左存储,连续存放直到存不下的时候就跳过下一个相邻的字节单位继续规划,字节单位地址从小到大。位段舍弃还是利用不确定,int在16位下为2字节,int表示无符号还是有符号也是不确定的。所以位段的可移植性是有点差的。
所以大家谨慎使用!
位段的运用
位段在我们平时发消息里面是很重要的:我们发消息是要有ip地址,自己发的消息,还有一些设么转码的。这些内存并不大。所以我们要用位段来减小内存的开销,提高发送的效率。
位段的注意事项
因为位段是以bit来算的,而地址是对应字节的。所以段位是没有地址的!
只有结构体名可以取地址,其内部的成员是不能取地址的!