关于位域的一些东西

在某些特殊的情况下,对于内存的使用有着非常苛刻的要求(如L2),这个时候就可以用到位域这个东西,当然对于仅仅是单个结构体也是没有什么意义,因为节省的空间太少,如果某个结构体的维度非常的大,这个时候使用位域将会有非常显著的改变。

注:

注重可移植性的代码应该避免使用位域:由于下面这些与实现有关的依赖性,位域在不同的系统中有不同的结果。

1)int 位域被当作有符号数还是无符号数

2)位域中的最大数目。32 位 , 16位,64 位机

3)位域中的成员在内存中是从左向右分配,还是从右向左分配

4)当一个声明指定了两个位域,第二个位域比较大,无法容纳于第一个位域剩余的位时(如:32位),编译器有可能把第二个位域放在内存的下一个字,也有可能直接放在第一个位域的后面


1. 一个位域宽度应该不比它的类型宽度还要宽,如:

用signed 或是unsigned 显式的声明位域可以有效的1)中的因为编译器而导致结果不同的问题

位域的类型必须是int , signed int, unsigned int, 其他都不是标准的类型(既然要用位域,那就用unsigned int 好了,反正长度已经被写死了)。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值