为什么C#中的sizeof(bool)== sizeof(byte)?

sma*_*man 4 c# byte memory-management boolean sizeof

可能重复:
c#中布尔值的二进制表示形式是什么

根据MSDN文档,sizeof关键字"用于获取非托管类型的字节大小",基元被视为非托管类型.如果我检查sizeof(bool),结果是1.

在我看来,使用布尔值应该只需要一点内存.我错了吗?使用Boolean值实际上需要一个完整的内存字节吗?为什么?

ron*_*chn 12

出于性能原因,它使用整个字节的内存.

如果它只使用一个位,你用其他7位做什么?很少有变量是布尔值,其他变量可能不需要一个位.所以它只对其他布尔人有用.

例如,4字节整数.此外,出于性能原因,许多较大类型需要从适当的字节边界开始.例如,CPU可能不允许您从任何地址开始轻松引用4字节地址(即地址可能需要被4整除).

如果它使用一位内存,意味着其他7位可用于其他布尔值,尝试使用此布尔值会更复杂.因为它不能直接寻址,所以你需要获取字节,然后在测试之前提取该位,如果它是1或0.这意味着更多的指令 - 因此性能更慢.

如果你有许多布尔值,并且你希望它们只使用一点内存EACH,你应该使用a BitArray.这些是单比特的容器.它们就像布尔阵列一样.


Mar*_*ers 7

字节是可寻址内存的最小量..NET团队选择使用一个字节来存储a bool来简化实现.

如果你想更紧凑地存储大量的位,你可以看一下BitArray.