C#中的布尔变量如何存储在内存中?也就是说,它们是作为一个字节存储而其他7位是否被浪费,或者,在数组的情况下,它们是否被分组为1字节的布尔块?
这回答了关于Java的相同问题(为什么没有定义Java的布尔基元大小?).Java和C#在这方面是一样的吗?
Mar*_*ell 32
在C#中,默认情况下这些位不会打包,因此多个bool 字段将占用1个字节.您可以使用BitVector32
,BitArray
或简单地按位运算来减少此开销.作为变量,我似乎记得他们需要4个字节(基本上处理为int
= Int32
).
例如,以下设置i
为4:
struct Foo
{
public bool A, B, C, D;
}
static unsafe void Main()
{
int i = sizeof(Foo);
}
Run Code Online (Sandbox Code Playgroud)
Sti*_*gar 19
在C#中,它们在数组或字段中存储为1个字节,但有趣的是,当它们是局部变量时,它们是4个字节.我相信bool的1字节是在.NET文档中的某个地方定义的,与Java不同.我想局部变量的4个字节的原因是为了避免在寄存器中读取32位时屏蔽这些位.sizeof运算符仍显示1个字节,因为这是唯一相关的大小,其他所有内容都是实现细节.
归档时间: |
|
查看次数: |
21340 次 |
最近记录: |