C中的位域有多慢

前端之家收集整理的这篇文章主要介绍了C中的位域有多慢前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个C应用程序,其中包含许多具有手动控制位字段的结构,类似于
#define FLAG1   0x0001  
#define FLAG2   0x0002      
#define FLAG3   0x0004      

class MyClass
{
'
'
  unsigned Flags;

  int IsFlag1Set() { return Flags & FLAG1; }
  void SetFlag1Set() { Flags |= FLAG1; }
  void ResetFlag1() { Flags &= 0xffffffff ^ FLAG1; }
'
'
};

由于显而易见的原因,我想将其改为使用位字段

class MyClass
{
'
'
  struct Flags
  {
    unsigned Flag1:1;
    unsigned Flag2:1;
    unsigned Flag3:1;
  };
'
'
};

我进行这种切换的一个问题是,我在这个网站上遇到了一些引用,指出C中的比特位慢.我的假设是,它们比上面显示的手动代码还要快,但是有什么硬参考资料涵盖了在各种平台上使用位域的速度,特别是32位和64位窗口.应用程序处理内存中的大量数据,并且必须既快速又高效地记录内存,这可能是为什么首先写入这些数据.

解决方法

两个示例应该非常相似,因为编译器在两种情况下都必须最终发出相同的位掩码指令.要知道哪个是最好的,请运行几个简单的实验.但如果结果不确定,不要惊讶;这就是我预测的…

你可能会更好地说,bitfields是bool类型.

猜你在找的C&C++相关文章