bool类型变量如何存储在内存中? (C ++)

时间:2011-11-01 14:24:27

标签: c++ boolean

布尔测试;

sizeof(test) = 1如果使用VS 2010.由于每个C ++数据类型都必须是可寻址的, “test”bool变量是8位(1字节)。

我的问题是“test”变量真的占用内存中的1个字节吗?

是否有任何实现技能可以使bool数据类型仅占用 一点?如果是的话,你能举个例子吗?

bool test1[32](在VS 2010中), int test2(在VS 2010中)

test1test2占用相同的内存吗?

3 个答案:

答案 0 :(得分:9)

test1的每个元素都必须是可寻址的。这意味着test1至少需要32个字节(而不是位)。

如果您希望将多个布尔值存储在单个变量中,请使用std::bitsetstd::vector<bool>(但要注意后者实际上不是bool的向量,它是专门设计的节省空间)。

IIRC,C ++ 11还定义了std::dynamic_bitset

答案 1 :(得分:3)

  

我的问题是“test”变量真的占用内存中的1个字节吗?

是的,如果是sizeof(bool)==1。基本上,boof的sizeof是实现定义的,这意味着某些编译器可能大于1个字节。

  

bool test1 [32](在VS 2010中),int test2(在VS 2010中)
  test1和test2是否占用相同的内存?

使用sizeof运算符可以知道每个人占用的内容。这就是sizeof运营商的用途。因此test1test2将分别占用sizeof(test1)sizeof(test2) 字节

答案 2 :(得分:2)

变量为1位的另一种可能性是放入位域结构:

struct {
    int a:1;
    int b:1;
};