【发布时间】:2023-03-17 05:49:01
【问题描述】:
我想将位存储在数组中(如结构)。所以我可以遵循以下两种方法中的任何一种
方法 1 (AN 1)
struct BIT
{
int data : 1
};
int main()
{
BIT a[100];
return 0;
}
方法 2 (AN 2)
int main()
{
std::bitset<100> BITS;
return 0;
}
为什么有人更喜欢 AN 2 而不是 AN 1?
【问题讨论】:
-
引用 cplusplus.com 在 bitset 上的页面,“该类与常规数组非常相似,但针对空间分配进行了优化”。如果您的整数是 4 个字节,那么位集使用的空间将减少 32 倍。
-
你的结构
BIT无论如何都会对齐到(至少)一个字节。 -
@Jon,将其发布为答案。 (这是一个很好的观点。)
-
@sbi 大多数实现都有 >= 1 字节的布尔值,所以 bitset 的效率仍然是 8 倍。
-
还需要说明的是,根据你的使用方式,AN1在使用更多内存的同时,访问时间也比AN2快。我说取决于如果数组很大,由于 CPU 缓存内存,bitset/vector
版本可能仍然更快。
标签: c++ bit-fields bitset