编组时包装如何工作?

时间:2018-03-21 13:59:29

标签: c# marshalling

我有这个结构:

[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的含义中有什么我不理解的东西吗?

1 个答案:

答案 0 :(得分:4)

来自MSDN

  

使用以下规则对齐类型实例的字段:

     
      
  • 类型的对齐方式是其最大元素(1,2,4,8等,字节)的大小或指定的包装大小,以较小者为准
  •   

您有一个Pack=8,但您的最大尺寸元素是4(UInt32)。 8和4中的较小者是4。

如果您希望结构为40个字节,则必须添加4个字节的“填充”。