在c++中,
为什么布尔值是1字节而不是1位? 为什么没有4位或2位整数类型?
在为CPU编写模拟器时,我忽略了上述内容
在c++中,
为什么布尔值是1字节而不是1位? 为什么没有4位或2位整数类型?
在为CPU编写模拟器时,我忽略了上述内容
当前回答
因为在一般情况下,CPU以1字节作为基本单位分配内存,尽管一些CPU如MIPS使用4字节字。
但是vector以一种特殊的方式处理bool类型,vector<bool>为每个bool类型分配一个位。
其他回答
即使最小大小可能是1字节,你可以在1字节上有8位布尔信息:
http://en.wikipedia.org/wiki/Bit_array
Julia语言有BitArray,我读过c++实现。
从维基百科:
从历史上看,字节是的数字 用于编码单个字符的位 电脑里的文本,的确如此 因此,基本可寻址 许多计算机中的元件 架构。
因此字节是基本的可寻址单位,低于它计算机体系结构不能寻址。由于(可能)不存在支持4位字节的计算机,所以没有4位bool等。
然而,如果你可以设计这样一个体系结构,它可以将4位作为基本可寻址单位,那么你将拥有大小为4位的bool值,只在那台计算机上!
字节是计算机中数字数据存储的较小单位。在计算机中,RAM有数百万个字节,每个字节都有一个地址。如果每个比特都有一个地址,那么计算机就可以少管理8倍的内存。
更多信息:维基百科
最简单的答案是;这是因为CPU以字节而不是位来寻址内存,按位的操作非常慢。
然而,在c++中可以使用位分配。对于位向量,有std::vector专门化,还有接受位大小条目的结构。
因为在一般情况下,CPU以1字节作为基本单位分配内存,尽管一些CPU如MIPS使用4字节字。
但是vector以一种特殊的方式处理bool类型,vector<bool>为每个bool类型分配一个位。