gpt4 book ai didi

C++:是否可以在同一个字节内压缩 `bool` 个对象?

转载 作者:IT王子 更新时间:2023-10-28 23:33:19 31 4
gpt4 key购买 nike

考虑一个具有许多 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com