printf("bool: %zu; true: %zu; 1: %zu\n", sizeof (bool), sizeof true, sizeof 1);
以上代码产生
bool: 1; true: 1; 1: 4
我对sizeof(1)很好,它是一个整数,因此大小为4个字节。
但是bool (and true)
只需要1 "bit"
的大小,输出仍然是1,即1个字节。
为什么会这样?
答案 0 :(得分:5)
对于有效(打包)表示,请使用std::bitset:
#include <bitset>
std::bitset<2000000> my_bits;
显然这仅适用于C ++。在C中你必须自己明确地实现它,例如:
#include <stdint.h>
#include <limits.h>
uint8_t my_bits[2000000 / CHAR_BIT];
然后访问使用按位运算实现一些简单内联函数所需的各个位。
答案 1 :(得分:2)
最小可寻址单位是字节。每个对象都应有自己的地址。 sizeof运算符也返回对象占用的字节数。即使C ++中的空结构也应具有非零大小。
您可以使用标准类std::bitset
而不是布尔数组。
答案 2 :(得分:2)
编译大小为std::bitset<N>
的替代方法是使用具有动态大小的特化std::vector<bool>
。但关注,它不会作为常规容器,因为它提供proxy来访问个别位。