为什么System.Boolean占用4个字节?它只存储一个状态,无论是真还是假,它可以存储在比4个字节更少的空间中.
A bool
实际上只有1个字节,但对齐可能会导致在32位平台上使用4个字节,甚至在64位平台上使用8个字节.例如,Nullable
(aka bool?
)类型使用完整的32位或64位 - 取决于平台 - 即使它只包含两个bool
s. 编辑:正如Jon Skeet指出的那样,对齐的填充并不总是存在.例如,Nullable
s 数组每个对象只需2个字节而不是4个或8个.
但是bool
如果你有很多要存储的话,即使代表a的8位也可能被认为是浪费.因此,如果您创建一个具有多个bool
s作为成员的Nullable<>
类型(或使用多种类型),并且您的类的用户可能会创建它的许多实例,您可以考虑使用BitVector32
替代.例如,框架本身使用这种技术来减少许多Windows窗体控件的内存占用.
因为它很快.
32位处理器通常使用32位值.使用较小的值涉及较长的指令或额外的逻辑.
谷歌搜索System.Boolean大小的第一个结果告诉我,它与内存对齐有关.推动四字节Int32比使用单个字节/位更快.