位域是C语言里面比较高级的特性,在结构体中比较常见。
现在在嵌入式开发中还比较常用,主要是能够节约内存空间。
如:
typedef struct {
short int flag_a: 1; /* 在内存中只占 1 bit
* 超出可能会向高位覆写
* 但也可能丢失高位,由编译器而定 */
short int flag_b: 1; /* 占 1 bit */
short int flag_c: 4; /* 占 4 bits */
short int flag_d: 2; /* 占 2 bits */
short int flag_e; /* 占 16 bits */
} flags;
/* 这里整个结构体在内存中只占用了 4 Bytes */
/* 但还要注意:分配内存时还要考虑内存对齐原则,
* 如,上面 flag_d 之后到 flag_e 之间,内存还有 8bits 的空余。
* 所以 请尽量把位域字段放在一块儿!
* 如果在 flag_e 之后再添加一个 flag_f: 8 的话,空间是只会向后扩展
* 而不会插入 flag_d 和 flag_e 之间空余空间的。
*/
// EOF
0 comments:
Post a Comment