C++中bitset的大小是多少

Sau*_*abh 12 c++ memory-management bitset

我想知道bitset实际上如何分配内存.我从一些博客中读到,它占用了内存.但是当我运行以下代码时:

   bitset<3> bits = 001;
   cout<<sizeof(bits);
Run Code Online (Sandbox Code Playgroud)

我得到输出为4.它背后的解释是什么?

还有一种在C++中以位为单位分配空间的方法吗?

Pio*_*ycz 9

您可以近似sizeof(bitset<N>)为:

  1. 如果内部表示是32位(如32位系统上的无符号) 4 * ((N + 31) / 32)
  2. 如果内部表示是64位(就像64位系统上的无符号长) 8 * ((N + 63) / 64)

似乎第一个是真的:4 * ((3 + 31) / 32)4


For*_*veR 8

我得到输出为4.它背后的解释是什么?

标准中没有关于bitset应该如何实现的信息.它的实现已定义,请查看bitset header您的编译器.

还有一种在C++中以位为单位分配空间的方法吗?

不,没有方法在C++中以位为单位分配空间.


Juh*_*uho 8

您的CPU不使用单个位,而是使用字节和字.在您的情况下,sizeof(bits)导致4,因为编译器决定将此数据结构与4个字节对齐.