【发布时间】:2012-08-31 02:12:31
【问题描述】:
bool 在 C++ 中占用 1 个字节。但是,为什么 bool[8] 占用 8 个字节而不是 1 个字节?
一个字节有足够的空间容纳 8 位。
我使用 GCC 使用 -Os 标志编译了这个:
#include <iostream>
using namespace std;
class Foo
{
public:
bool m_bool[8];
};
int main ()
{
cout << "Size: " << sizeof(Foo) << " byte(s) " << endl;
return 0;
}
它返回“大小:8 字节”。
有办法优化吗?
【问题讨论】:
-
如果你需要大小,你可以使用bitset。不过,使用 1 位宽度比仅使用普通数据类型要慢。
-
一个布尔值在 C++ 中不占用 1 位,只有一个向量
可以提供这种压缩。 -
在 C/C++ 中,任何对象都不能小于 1 字节。将它们放在一个数组中不会“神奇地”压缩它们。
-
我也认为 bool 的大小不需要为 1 字节 - 试图找到它
-
@nhahtdh 确实如此。很多人讨厌
vector<bool>,因为它破坏了与向量行为的几个一致性。老实说,我只见过一种情况,它最终比deque<bool>更快。