繁体   English   中英

C#中的原始布尔大小

[英]Primitive Boolean size in 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个字节,因为这是唯一相关的大小,其他所有内容都是实现细节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM