布尔测试;
sizeof(test) = 1
如果使用VS 2010.由于每个C ++数据类型都必须是可寻址的,
“test”bool变量是8位(1字节)。
我的问题是“test”变量真的占用内存中的1个字节吗?
是否有任何实现技能可以使bool数据类型仅占用 一点?如果是的话,你能举个例子吗?
bool test1[32]
(在VS 2010中),
int test2
(在VS 2010中)
test1
和test2
占用相同的内存吗?
答案 0 :(得分:9)
test1
的每个元素都必须是可寻址的。这意味着test1
至少需要32个字节(而不是位)。
如果您希望将多个布尔值存储在单个变量中,请使用std::bitset
或std::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运营商的用途。因此test1
和test2
将分别占用sizeof(test1)
和sizeof(test2)
字节。
答案 2 :(得分:2)
变量为1位的另一种可能性是放入位域结构:
struct {
int a:1;
int b:1;
};