C#结构尺寸评估

时间:2013-12-21 15:52:18

标签: c# struct offset

请,任何人都可以告诉结构的大小,以及如何计算它:

[StructLayoutAttribute(LayoutKind.Sequential, Pack=2)]
public struct SomeStruct
{
     public short sh;
     public int   i;
     public byte  b;
     public ushort u;
     [MarshalAs(UnmanagedType.ByValArray, SizeConst=7)]
     public byte[] arr;
}

3 个答案:

答案 0 :(得分:3)

我想你想了解如何分配内存,否则你可以使用:

System.Runtime.InteropServices.Marshal.SizeOf(TheStruct)

你选择打包在一个2字节的边界,所以你基本上分两步分配内存。 所以short(有符号或无符号)需要2个字节,int需要四个字节byte只需要一个,但由于你指定的包装也需要两个,因为同样的原因我们需要考虑的数组8。 所以我们有

2+4+2+2+8 = 18 bytes

答案 1 :(得分:1)

您可以使用以下代码获得此结构的确切大小 -

System.Runtime.InteropServices.Marshal.SizeOf(SomeStruct)

答案 2 :(得分:0)

试试这个:

int size = System.Runtime.InteropServices.Marshal.SizeOf(new SomeStruct());
Console.WriteLine(size);

或者,从related post开始,这个:

int size;
unsafe
{
    size = sizeof(SomeStruct);
}

正如Felice Pollano解释的那样,两者都会产生18个。