C#中的原始布尔大小

C#中的布尔变量如何存储在内存中? 也就是说,它们是作为一个字节存储而其他7位是否被浪费,或者,在数组的情况下,它们是否被分组为1字节的布尔块?

这回答了关于Java的相同问题( 为什么没有定义Java的布尔基元大小? )。 Java和C#在这方面是一样的吗?

在C#中,默认情况下这些不会打包,因此多个bool 字段将占用1个字节。 您可以使用BitVector32BitArray或简单的按位算法来减少此开销。 作为变量,我似乎记得他们需要4个字节(基本上作为int = Int32处理)。

例如,以下设置i到4:

 struct Foo { public bool A, B, C, D; } static unsafe void Main() { int i = sizeof(Foo); } 

在C#中,它们在数组或字段中存储为1个字节,但有趣的是,当它们是局部变量时,它们是4个字节。 我相信bool的1字节是在.NET文档中的某个地方定义的,与Java不同。 我想局部变量的4个字节的原因是为了避免在寄存器中读取32位时屏蔽这些位。 sizeof运算符仍显示1个字节,因为这是唯一相关的大小,其他所有内容都是实现细节。