2007-09-03

位域

位域是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: