何时以及为什么要在代码中使用Bitfield?

时间:2012-09-26 01:37:38

标签: c++ c bit-manipulation bit-fields

  

可能重复:
  When is it worthwhile to use bit fields?

我最近在查找按位运算符,偶然发现了bitfield的概念。这看起来很有趣并且是一个非常酷的概念,但是何时和/或为什么一个人会在他们的代码中使用它?

我知道它在嵌入式系统编程中使用了很多,但为什么(我似乎无法找到有关它为什么有用的东西)?这有什么好处吗?其他一些位置的位置在哪里有用?

3 个答案:

答案 0 :(得分:3)

通常,在不关心速度时使用位域,而不关心内存布局。如果您关心这些事情,请不要使用位域。

如果你有一组布尔标志,那么你可以使用位域打包它们(减少存储所需的大小)。但是,只能使用位域来访问位域。

这是经典的尺寸与速度问题。

另外需要注意的是,如果您有一组小于本机字的位域,那么您的编译器可能会尝试填充并对齐位域结构。因此,您必须最终使用#pragma pack'ing结构或至少使用本机单词。因此,如果您使用的是32位计算机并且碰巧有32个仅在内部使用的布尔标志,那么这将很好地利用位域。

答案 1 :(得分:2)

立即想到的一些用途是:

  • 实施通信协议;
  • 将用户数据存储在空间有限的对象中;
  • 扩展现有协议中的数据结构(类似于上述);
  • 在一次操作中执行多项测试;

答案 2 :(得分:2)

我已经使用位域作为联合的一部分来包含嵌入式系统中的寄存器,即微控制器,编解码器的控制寄存器。它们在将寄存器的物理布局描绘为软件构造从而传达可读性方面非常有用。它们通常用于设备驱动程序实现。几年前,8位微处理器具有非常少的闪存和RAM存储器,因此位域很常见。这些天32位微处理器有很多ram / flash意味着不需要位域。