布尔类型变量 "test" 在使用 VS 2010 编译器时,如果每个 C++ 数据类型必须是可寻址的,则此变量占用 8 位(1 字节)。
我的问题是, "test" 变量是否真正占用了 1 字节的内存空间?
是否存在一些技巧可以使布尔数据类型只占用一个位?如果是,请给我举一个例子。
"test1" 是布尔类型数组,大小为 32,在 VS 2010 中;"test2" 是整型变量,在 VS 2010 中。
请问,"test1" 和 "test2" 是否占用相同的内存空间?
布尔类型变量 "test" 在使用 VS 2010 编译器时,如果每个 C++ 数据类型必须是可寻址的,则此变量占用 8 位(1 字节)。
我的问题是, "test" 变量是否真正占用了 1 字节的内存空间?
是否存在一些技巧可以使布尔数据类型只占用一个位?如果是,请给我举一个例子。
"test1" 是布尔类型数组,大小为 32,在 VS 2010 中;"test2" 是整型变量,在 VS 2010 中。
请问,"test1" 和 "test2" 是否占用相同的内存空间?
test1
元素都必须可寻址。这意味着数组test1
(使用bool test1[32]
创建)至少需要32字节(每个元素1字节)。< / p>
< p >如果您想要在单个变量中存储多个布尔值,请使用std::bitset
或std::vector<bool>
(但请注意,后者不是真正的布尔向量,它是为了节省空间而设计的特殊化类型)。< / p>
< p >如果我没记错的话,C++11也定义了std::dynamic_bitset
。< / p>
bool
必须占用1个八位字节(byte),而不是4个(32位)。是的,仍然存在8位可寻址系统。ARM9可以访问8位或32位值。 - Thomas Matthewssizeof(bool) == 1
。基本上,bool的大小是由具体实现决定的,这意味着对于某些编译器,它可以大于1个字节。sizeof(test1)
和sizeof(test2)
字节。struct {
int a:1;
int b:1;
};
unsigned a : 1
吗? - Xeo