请,任何人都可以告诉结构的大小,以及如何计算它:
[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;
}
答案 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个。