自定义内存2

本文详细介绍了C#和C语言中的位段概念及其内存节省优势,枚举类型用于列举有限取值,联合体(共用体)的成员共享存储空间,以及动态内存管理中的malloc、free、calloc和realloc函数的使用和注意事项。
摘要由CSDN通过智能技术生成

1.位段

首先要注意的是,位段是依托结构体存在的,即位段只能在结构体内使用。其次,位段的使用对象是比特位i,而不是字节。

看下面的代码。

可以看到,第一个结构体与第二个结构体的差别仅仅在于后者使用了位段。如何求结构体的字节我们已经很清楚了,那么如果加上了位段的话,即表示该变量只需占用指定比特位的空间。如在第二个结构体里,首先a是int类型,那么系统会为其开辟4个字节,即32个比特位的空间,但是后面的“:2”说明使用者只需要其占用2个比特位的空间,那么即使开辟了32个比特位,a也只会占用其中2个比特位的空间,这时还剩30个比特位。对b来说,它也只需要2个比特位的空间,于是在剩下的30个比特位中又拿出两个给了b,此时还剩28个比特位,依次类推,则实际上只用开辟一次空间就可以把四个变量储存起来(注意,虽然一共只占用了8个比特位,但是系统为其开辟的空间仍旧是32个比特位,其他空间则被浪费了。)因此第二个结构体的大小就是4个字节。

当然,也有可能只开辟一次空间不够的情况。

 例如这种情况,系统首先为a开辟一个字节的空间,但a实际只占用了4个比特位,此时还剩5个比特

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值