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

标签 c++ memory boolean byte bit

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

相关文章:

c++ - 如何将二维数组的引用传递给函数?

swift - 使用 Swift 中的 C 回调时的对象复活

java - 获取操作系统级别的系统信息

coding-style - boolean 值作为方法参数是 Not Acceptable 吗?

PHP 老派函数 "or"有异常

python - Caffe做前向推理时GPU利用率不够高,有什么想法吗?

c++ - VS2017 中缺少 Win32 控制台应用程序。如何创建 C++ 空项目?

c++ - 如何编辑随机内存?

java - boolean 值不变

c++ - Qt示例无法在Ubuntu上运行