A bool
is actually only 1 byte, but alignment may cause 4 bytes to be used on a 32-bit platform, or even 8 bytes on a 64-bit platform. For example, the Nullable<bool>
(aka bool?
) type uses a full 32 or 64 bits—depending on platform—even though it's comprised of just two bool
s. EDIT: As pointed out by Jon Skeet, padding for alignment isn't always present. As an example, an array of Nullable<bool>
s takes only 2 bytes per object instead of 4 or 8.
But even 8 bits to represent a bool
can be considered wasteful if you have many of them to store. For this reason, if you create a type that has many bool
s as members, (or uses many Nullable<>
types), and users of your class might create many instances of it, you might consider using a BitVector32
instead. The framework itself uses this technique to reduce the memory footprint of many of the Windows Forms controls, for instance.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…