我有一个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类型.