C++ bool类型变量如何存储在内存中?(C+;+;)
布尔试验C++ bool类型变量如何存储在内存中?(C+;+;),c++,boolean,C++,Boolean,布尔试验 sizeof(test)=1如果使用VS 2010。因为每个C++数据类型必须是可寻址的, “test”bool变量为8位(1字节) 我的问题是,“test”变量是否真的占用内存中的1字节 是否有任何实现技巧可以使bool数据类型只占一部分 一点点?如果是,你能给我举个例子吗 booltest1[32](在VS 2010中), inttest2(VS 2010) test1和test2是否占用相同的内存?test1的每个元素都必须是可寻址的。这意味着数组test1(使用booltest
sizeof(test)=1
如果使用VS 2010。因为每个C++数据类型必须是可寻址的,
“test”bool变量为8位(1字节)
我的问题是,“test”变量是否真的占用内存中的1字节
是否有任何实现技巧可以使bool数据类型只占一部分
一点点?如果是,你能给我举个例子吗
booltest1[32]
(在VS 2010中),
inttest2
(VS 2010)
test1
和test2
是否占用相同的内存?test1的每个元素都必须是可寻址的。这意味着数组test1
(使用booltest1[32]
创建)至少需要32个字节(每个元素1个字节)
如果希望在单个变量中存储多个布尔值,请使用std::bitset
或std::vector
(但请注意,后者实际上不是布尔向量,它是为节省空间而专门设计的)
IIRC,C++11还定义了std::dynamic_位集
我的问题是,“test”变量是否真的占用内存中的1字节
是,如果sizeof(bool)==1
。基本上,sizeof bool是实现定义的,这意味着对于某些编译器,它可能大于1字节
bool test1[32](VS 2010),int test2(VS 2010)test1和test2占用相同的内存吗
通过使用sizeof运算符可以知道它们各自占用的空间。这就是sizeof操作符的作用。因此
test1
和test2
将分别占用sizeof(test1)
和sizeof(test2)
字节。另一种可能是将1位变量放入位字段结构中:
struct {
int a:1;
int b:1;
};
我要强调的是,当超级优化速度时,平台在32位机器上以4字节存储布尔值是合理的。然后,如果一个结构中有4个布尔值,那么只需要一个ALU操作来检查布尔值是否为真,而在一个机器字中包含多个布尔值时,只需要两个ALU操作。(Ofc如此小的差异通常一点都不重要。)一些嵌入式处理器实际上有位可寻址内存,因此bool变量可以占用一位。您可能指的是32位,而不是字节如果处理器有8位可寻址单元,这意味着
bool
必须占用1个八位(字节),而不是4个八位(32位)。是的,现在仍然有8位可寻址系统。ARM9可以访问8或32位值。@ EntItHelo:< Cord> Test1是一个32可寻址的代码<代码> Boo.< /Cord>对象,它至少需要32字节,每个对象需要一个。@ ItNyth64:不,我是指32字节,其中字节是由C++标准强制执行的最小存储单元(不一定是8位)。2年后…是的,动态比特集,当然。谢谢你!它不应该是无符号的a:1吗?我确信我是这样使用它的,尽管我从未将它视为1位有符号整数,所以这里有一点。