bit field 注意事项

bit field位域的意思. 位域是类似于 sructunion 的自定义数据结构. 位域一般用于需要节省内存使用的场景(网络协议), 能够将结构体成员的范围限制在 bit 级别, 而不是基本类型:int, bool, char等级别.

需要注意以下几点:

  • 位域的内存布局与平台相关, 移植可能存在问题.
  • 位域的类型必须是整型或枚举类型, 带符号类型是未定义的.
  • 位域不能进行寻址.
  • 位域成员不能跨越两个类型.

下面直接看一个例子:

#include <iostream>

struct bitfield {
    unsigned short m_a : 1, m_b : 2, m_c : 3, : 5, m_d : 5;
};

int main(void) {
    bitfield bf = {
        .m_a = 1,
        .m_b = 1,
        .m_c = 1,
        .m_d = 1,
    };

    std::cout << sizeof(bitfield) << std::endl; // 输出:2
}

上面定义了 m_a...m_d 四个成员, 和一个匿名成员作为占位符. 如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.

Leave a Reply

Your email address will not be published. Required fields are marked *