比如
uint8 bPendingNetUpdate:1;
取代bool型变量。
实际上这个东西真地只占一个bit吗?
如果合理使用,位域是可以起到节省空间的作用的。不合理使用的话,反而是浪费空间。
如提问者所描述,其完整的结构是:
struct BitField
{
uint8 bPendingNetUpdate:1;
};
这里,bPendingNetUpdate确实是只占一个1个bit的。
但由于结构体的大小是结构体中最宽类型大小的整数倍,所以BitField结构的大小为uint8类型大小8bit的整数倍,这里很明显,就是一个字节。
可见,有7个bit实际上并没有使用,浪费了空间。
了解更多内容可参见:C/C++位域结构深入解析 一文
3 回答1.4k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
4 回答931 阅读
1 回答999 阅读
1 回答1k 阅读
1 回答788 阅读
1 回答889 阅读
是占一个
bit
,不过结构体为了内存对齐会有padding
,所以仅仅一个位域其实并不节省内存。。紧凑一点就会有节省内存的效果了,比如连着好几个这种类型的标志变量,肯定比
bool
节省内存