考虑一个具有许多 boolean 属性的类
class A
{
bool a;
bool b;
bool c;
bool d;
bool e;
bool f;
};
虽然每个 bool
对象可以用一个位表示,这里每个属性都需要一个字节(如果我没记错的话)。该对象将占用 6 个字节,而不仅仅是 1 个字节(其中 6 位将被实际使用)。原因是位不可寻址,只有字节可寻址。
为了稍微压缩内存,可以使用 vector<bool>
或 bitset
然后通过它们的索引访问属性。例如,可以将 get 函数编写为
bool A::get_d() {data[3];}
理想情况下,我希望能够使用 InstanceOfA.d
直接访问属性.是否可以这样做,同时确保我所有的 6 bool
被压缩在同一个字节内?
最佳答案
您可以使用 bitfields .适用于 Repl.it 的 gcc 版本 4.6.3。
#include <iostream>
struct Test
{
bool a:1;
bool b:1;
bool c:1;
bool d:1;
bool e:1;
bool f:1;
bool g:1;
bool h:1;
//bool i:1; //would increase size to 2 bytes.
};
int main()
{
Test t;
std::cout << sizeof(t) << std::endl;
return 0;
}
关于C++:是否可以在同一个字节内压缩 `bool` 个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53753245/