我正在阅读《C++ 程序设计语言》。Stroustrup 在书中指出,sizeof(char) == 1
,1 <= sizeof(bool)
,具体取决于实现。为什么布尔值这样简单的类型需要与 char 占用相同的空间呢?
在现代计算机架构中,一个字节是最小可寻址的内存单元。要将多个位打包成一个字节需要应用额外的位移操作。在编译器级别上,这是内存与速度需求之间的权衡(在高性能软件中,那些额外的位移操作可能会累加并使应用程序不必要地减慢)。
因为在C++中,您可以取布尔值的地址,而大多数机器无法寻址单个位。
它占用相同的空间,因为在内存中,你可以写入的最小空间是一个字节。这两个值都存储在一个字节中。虽然理论上只需要1个比特来表示布尔值,但你仍然需要一个完整的字节来存储该值。
bool b[9];
bool *pb0 = &b[0];
bool *pb1 = &b[1];
for (int counter=0; counter<9; ++counter)
{
// some code here to fill b with values
b[counter] = true;
}
实际上,据我所知,在大多数实现中sizeof(bool) == sizeof(int)。 "int"旨在成为CPU最有效地处理的数据大小。因此,像"char"这样没有特定大小的东西与int的大小相同。如果每个对象有大量这些元素,您可能需要实现一种存储它们的打包方式,但在正常计算期间,应该保留其本机大小。
bool
必须至少与char
相同大小。但它可以更大。 - underscore_d