【发布时间】:2019-12-03 13:19:25
【问题描述】:
我有这个简单的结构,它的字段总和 = 10 位
public struct TestSTrut
{
public byte ByteField;
public bool BoolFieldOne;
public bool BoolFieldTwo;
public TestSTrut(byte a, bool b, bool c)
{
ByteField= a;
BoolFieldOne= b;
BoolFieldTwo= c;
}
}
现在,如果我将其中的 1000 个放入数组中,则数组的大小为 3012 字节,这意味着每个结构为 3 字节?但应该是 1250 字节? (10*1000) / 9.
如果我将 1000 个字节放在一个数组中进行比较,它的大小为 1012 个字节(12 个字节用于数组开销)。
我正在使用 Visual Studio 在 x64 的调试中对此进行测试
【问题讨论】:
-
如何安排 1 位内存?
-
@vasily.sib 两个布尔字段可以打包成一个字节(但不是)。
-
结构中字段的最小大小是一个字节而不是位 - 所以结构大小是 3 个字节。
-
struct alignemnt 将是 1 字节(所以 8 位),现在 8 位将占用 8 位,然后 bool 将在第 9 位写入,因为不需要 alignemnt,下一位需要alignet,所以会有 7 位偏移,并且在第 17 位将写入另一个布尔值。它将与 24 位对齐,并添加另外 7 个空位偏移量。给出 3 个字节的大小。
标签: c#