C语言中的布尔数组与位数组的区别

6

我需要在C语言中实现高效的位数组。根据我所看到的,C语言并不支持位数组,但是可以使用整数数组(根据我查看的一个网站),然后使用移位操作来访问单个位。是否仅声明布尔数组就可以达到同样的效果,还是这样不够内存高效?


2
在C语言中,_bool 通常是一个内部的 int。而 _bool[] 使用的内存大约是整数数组的32倍(加减一些)。 - EOF
1
如果您可以使用C ++,则std :: vector <bool>提供了您所描述的位打包空间优化。 - Jim Lewis
2
@EOF:_Bool(不是_bool)通常为1个字节,而不是与int相同的大小。 - Keith Thompson
遗憾的是,C++ 不是一个选择。 - Nickolouse
@camelccc:在现代CPU上,内存带宽比几个廉价的逻辑操作更昂贵。即使是L1往返也可能需要大约6个周期,而逻辑操作在超标量乱序CPU上几乎可以免费使用。(另一方面,这些CPU可能具有负载/存储缓冲区,可以节省L1往返时间...进入兔子洞)。 - EOF
显示剩余4条评论
1个回答

6

是的,一个简单的_Bool数组需要比一个整数数组加上一些位移更多的存储空间。 _Bool数组在sizeof(_Bool)的空间中存储一位数据(通常是一个字节)。 整数数组可以在每个字节中存储更多的位(最少8位)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接