我正在阅读C++编程语言.Stroustrup在其中陈述sizeof(char) == 1
和1 <= sizeof(bool)
.具体取决于实施.为什么像布尔这样的简单值与char相同?
在现代计算机体系结构中,字节是存储器的最小可寻址单元.要将多个位打包成一个字节,需要应用额外的位移操作.在编译器级别,它是内存与速度要求的折衷(在高性能软件中,那些额外的位移操作可能会不必要地增加和减慢应用程序).
因为在C++中,您可以获取布尔值的地址,并且大多数机器无法处理单个位.
它占用相同的空间,因为您可以在内存中写入的最小空间量是单个字节.两个值都存储在一个字节中.虽然理论上只需要1位来表示布尔值,但您仍然需要一个完整的字节来存储该值.
从理论上讲,你只需要一个bool的位,但使用少于1个字节的数据是很麻烦的.您需要更多指示才能实现任何目标,而您并没有真正受益.
如果要将多个布尔值打包为单个字节,可以使用位域结构.