我有这个结构:
[StructLayout(LayoutKind.Sequential, Pack = 8)]
unsafe struct MyStruct_t
{
public UInt32 ulID;
public fixed Byte xValue[32];
}
然后我运行此命令来获取大小:
Console.WriteLine("Marshal.SizeOf(typeof(MyStruct_t))= {0}", Marshal.SizeOf(typeof(MyStruct_t)));
并且答案始终是
Marshal.SizeOf(typeof(MyStruct_t))= 36
我期待着40岁。我错过了什么吗?在Pack = 8的含义中有什么我不理解的东西吗?
答案 0 :(得分:4)
来自MSDN:
使用以下规则对齐类型实例的字段:
- 类型的对齐方式是其最大元素(1,2,4,8等,字节)的大小或指定的包装大小,以较小者为准。
您有一个Pack=8
,但您的最大尺寸元素是4(UInt32
)。 8和4中的较小者是4。
如果您希望结构为40个字节,则必须添加4个字节的“填充”。