http://msdn.microsoft.com/ja-jp/library/xh3e3fd0.aspxによると バイト数を指定すると、2番目以降の構造体メンバーは、 メンバー型のサイズかnバイト境界 (n は 1、2、4、8、または 16 のいずれか) のどちらか小さい方に格納されます。 とあり、これを基本に以下の構造体で実験してみました。 以下の構造体でPackサイズNに8と16を指定した場合 System.Runtime.InteropServices.Marshalクラスの SizeOfとOffsetOfは同じになります。 オフセット値は上記の理屈により、理解できるのですが Pack:=16の場合、最後のメンバV6の後に15byteパディングされると思いましたが 結果は7byte。これは、どのように理解すればよいでしょうか? (32/64bitマシンで結果は同じ) <StructLayout(LayoutKind.Sequential, Pack:=N)> _ Private Structure PackN Dim v1 As Byte '1byte '1byteパディング Dim v2 As Int16 '2byte Dim v3 As Int32 '4byte Dim v4 As Int64 '8byte Dim v5 As Decimal '16byte Dim v6 As Byte '1byte '7byteパディング End Structure -----------------結果------------------------- Pack=8 Size :40 Byte v1 :Offset :0 Int16 v2 :Offset :2 Int32 v3 :Offset :4 Int64 v4 :Offset :8 System.Decimal v5 :Offset :16 Byte v6 :Offset :32 ---------------------------------------------- Pack16 Size :40 Byte v1 :Offset :0 Int16 v2 :Offset :2 Int32 v3 :Offset :4 Int64 v4 :Offset :8 System.Decimal v5 :Offset :16 Byte v6 :Offset :32
分類:[.NET]