【问题标题】:C# structure size evaluationC# 结构大小评估
【发布时间】:2013-12-21 15:52:17
【问题描述】:

请问,谁能告诉我这个结构的大小,以及如何计算它:

[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;
}

【问题讨论】:

  • 应该是 118 字节。可以肯定的是,最简单的方法是使用 Console.WriteLine(sizeof(SomeStruct)) 制作一个小型控制台程序。
  • 当然,那个结构是错位的

标签: c# struct offset


【解决方案1】:

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

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

好吧,您选择以 2 字节为边界进行打包,因此您基本上在第二步分配内存。 所以short(有符号或无符号)占用 2 个字节,int 占用四个字节 byte 只占用一个字节,但由于您指定的打包也占用两个字节,原因与我们需要考虑的数组相同8. 所以我们有

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      试试这个:

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

      或者,来自related post,这个:

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

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

      【讨论】:

        猜你喜欢
        • 2013-12-19
        • 2019-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-10
        • 2020-05-04
        • 2015-04-05
        • 1970-01-01
        相关资源
        最近更新 更多