using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace Struct { class Program { static void Main(string[] args) { Console.WriteLine("結構體大小:"+Marshal.SizeOf(new DataSize())); Console.ReadKey(); } } //可序列化 設置對齊值為1 //[Serializable, StructLayout(LayoutKind.Sequential, Pack = 1)] public struct DataSize { public ushort a;//對齊值2 public char b;//1 public ushort c;//2 public uint d;//4 public char e;//1 public char f;//1 public char g;//1 public int h;//4 }; }
按照最大的對齊值對齊,上面最大的對齊值為4,2+1=3<4 3+2=5>4,所以a和b占4個,c占4個,d占4個,e,f,g占4個,h占4個共20個字節。若設置對齊值為1,那么直接將所有對齊值相加即可為16.
輸出結果
結構體大小:20
轉載 https://blog.csdn.net/jueduiwudi6/article/details/80721108