C++中, 结构体外定义位域有什么好处?

比如

uint8 bPendingNetUpdate:1;

取代bool型变量。

实际上这个东西真地只占一个bit吗?

阅读 3.5k
2 个回答

是占一个bit,不过结构体为了内存对齐会有padding,所以仅仅一个位域其实并不节省内存。。
紧凑一点就会有节省内存的效果了,比如连着好几个这种类型的标志变量,肯定比bool节省内存

如果合理使用,位域是可以起到节省空间的作用的。不合理使用的话,反而是浪费空间。

如提问者所描述,其完整的结构是:

struct BitField
{
    uint8 bPendingNetUpdate:1;
};

这里,bPendingNetUpdate确实是只占一个1个bit的。
但由于结构体的大小是结构体中最宽类型大小的整数倍,所以BitField结构的大小为uint8类型大小8bit的整数倍,这里很明显,就是一个字节。
可见,有7个bit实际上并没有使用,浪费了空间。

了解更多内容可参见:C/C++位域结构深入解析 一文

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题