在某些特殊的情况下,对于内存的使用有着非常苛刻的要求(如L2),这个时候就可以用到位域这个东西,当然对于仅仅是单个结构体也是没有什么意义,因为节省的空间太少,如果某个结构体的维度非常的大,这个时候使用位域将会有非常显著的改变。
注:
注重可移植性的代码应该避免使用位域:由于下面这些与实现有关的依赖性,位域在不同的系统中有不同的结果。
1)int 位域被当作有符号数还是无符号数
2)位域中的最大数目。32 位 , 16位,64 位机
3)位域中的成员在内存中是从左向右分配,还是从右向左分配
4)当一个声明指定了两个位域,第二个位域比较大,无法容纳于第一个位域剩余的位时(如:32位),编译器有可能把第二个位域放在内存的下一个字,也有可能直接放在第一个位域的后面
1. 一个位域宽度应该不比它的类型宽度还要宽,如:
用signed 或是unsigned 显式的声明位域可以有效的1)中的因为编译器而导致结果不同的问题
位域的类型必须是int , signed int, unsigned int, 其他都不是标准的类型(既然要用位域,那就用unsigned int 好了,反正长度已经被写死了)。