加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的位域有多慢

发布时间:2020-12-16 05:30:51 所属栏目:百科 来源:网络整理
导读:我有一个C应用程序,其中包含许多具有手动控制位字段的结构,类似于 #define FLAG1 0x0001 #define FLAG2 0x0002 #define FLAG3 0x0004 class MyClass{'' unsigned Flags; int IsFlag1Set() { return Flags FLAG1; } void SetFlag1Set() { Flags |= FLAG1; } v
我有一个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类型.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读