如果1 bool是1字节[8位]那么4个bool的打包结构是32位还是4? pack指令删除了对齐要求,但是它会使得bools集更有效[记忆明智]吗?
答案 0 :(得分:6)
是。即使是布尔的压缩结构也将使用每布尔至少8位。除非您使用bit fields。
答案 1 :(得分:1)
4 bool
s。
每个bool
都需要一个唯一的地址(因为您可以获取bool
的地址)。如果使用位域,可以将大小减小到1 bool,但是你将无法获得单个位域的地址。
答案 2 :(得分:1)
bool的大小可能因操作系统和操作系统以及语言而异。我已经看到它是一个字节,一个单词和一个int(反过来也可以是任何东西)。但是如果sizeof(bool)是1,那么bools的压缩结构将是4(字节)(因此是32位)
为什么不使用:
,而不是搞乱包装和对齐std::vector<bool>
来自:http://www.cplusplus.com/reference/stl/vector/
它在内部被优化(或应该)为位域。试试吧,你会看到它使用的内存与每个值的单个位一致。
否则,您可以随时滚动自己的库或使用有限的FD_SET宏。
答案 3 :(得分:0)
这是一个实现定义的。该标准没有定义布尔值的大小。
修改强>
这来自标准:
5.3.3尺寸
sizeof运算符产生其操作数的对象表示中的字节数。操作数 是一个表达式,它没有被计算,或者是带括号的type-id。 sizeof运营商不得 应用于具有函数或不完整类型的表达式,或应用于所有类型之前的枚举类型 已声明枚举数,或此类型的带括号的名称,或指定的左值 一个比特字段。 sizeof(char),sizeof(signed char)和sizeof(unsigned char)是1;该 sizeof应用于任何其他基本类型(3.9.1)的结果是实现定义的。 [注意:在 ticular, sizeof(bool)和sizeof(wchar_t)是实现定义的 .69)] [注意:参见1.7 for 用于定义对象表示的byte和3.9的定义。 ]