Jér*_*ôme 127 c++ size boolean
在C++中,我想知道为什么bool类型是8位长(在我的系统上),只有一位足以保存布尔值?
我曾经认为这是出于性能原因,但是在32位或64位机器上,寄存器为32或64位宽,性能优势是什么?
或者这只是这些"历史"原因之一?
jal*_*alf 216
因为每个C++数据类型都必须是可寻址的.
你会如何创建指向单个位的指针?你不能.但是您可以创建指向字节的指针.所以C++中的布尔值通常是字节大小的.(它也可能更大.这取决于实现.主要是它必须是可寻址的,所以没有C++数据类型可以小于一个字节)
jld*_*ont 20
甲boolean类型通常如下寻址存储器的最小单位的目标机器(即,通常的8位字节)的.
对内存的访问总是处于"块"状态(多个字,这是为了提高硬件级别的效率,总线事务):在大多数CPU系统中,布尔位不能单独"寻址".当然,一旦数据包含在寄存器中,通常就会有专门的指令来独立地操作位.
出于这个原因,使用"位打包"技术以提高使用"布尔"基本数据类型的效率是很常见的.诸如enum(在C中)具有2编码功率的技术是一个很好的例子.大多数语言都有同样的技巧.
更新:由于一个很好的讨论,我注意到在C++ 中sizeof(char)==1的定义.因此,"布尔"数据类型的寻址与可寻址存储器的最小单元相关联(强调了我的观点).
关于8位是可寻址的最小内存量的答案是正确的.但是,在某种程度上,某些语言可以使用1位的布尔值.我似乎记得Pascal实现集合作为位串.也就是说,对于以下集合:
{1, 2, 5, 7}
Run Code Online (Sandbox Code Playgroud)
你可能在内存中有这个:
01100101
Run Code Online (Sandbox Code Playgroud)
当然,如果你愿意,你可以在C/C++中做类似的事情.(如果你跟踪一堆布尔值,它可能有意义,但这实际上取决于情况.)
| 归档时间: |
|
| 查看次数: |
64069 次 |
| 最近记录: |