StructLayoutを使用した場合のPaddingの埋まり方について
- 題名: StructLayoutを使用した場合のPaddingの埋まり方について
- 著者: おか
- 日時: 2006/11/01 18:37:55
- ID: 18075
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: StructLayoutを使用した場合のPaddingの埋まり方について
- 著者: おか
- 日時: 2006/11/02 16:28:55
- ID: 18086
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: StructLayoutを使用した場合のPaddingの埋まり方について
- 著者: NyaRuRu
- 日時: 2006/11/03 2:09:30
- ID: 18093
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: StructLayoutを使用した場合のPaddingの埋まり方について
- 著者: おか
- 日時: 2006/11/03 10:36:26
- ID: 18094
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[5]: StructLayoutを使用した場合のPaddingの埋まり方について
- 著者: NyaRuRu
- 日時: 2006/11/03 15:22:37
- ID: 18095
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: StructLayoutを使用した場合のPaddingの埋まり方について
- 著者: NyaRuRu
- 日時: 2006/11/03 15:36:32
- ID: 18096
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: StructLayoutを使用した場合のPaddingの埋まり方について
- 著者: おか
- 日時: 2006/11/07 8:42:50
- ID: 18122
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
お世話になっております。 StructLayoutを使用して8byteアラインメントでのPaddingの 埋まり方に関してご教授お願いします。 以下のように記述した場合 @:4byte A:12byte B:12byte となるのですが、期待していたByte数は @:8byte A:16byte B:48byte です。 ちなみに下記の"SubTest3"のみの場合は16byteとなり、期待していた Byte数になります。 Pack=8に設定してあるので、8byteで区切られると思っていたのですが、 違うのでしょうか? アドバイス、ご教授など、宜しくお願いします。 ------------------- 【Main】 static void Main() { Test1 t1 = new Test1(); Console.WriteLine("Test1 Size : {0}", Marshal.SizeOf(t1)); Test2 t2 = new Test2(); Console.WriteLine("Test2 Size : {0}", Marshal.SizeOf(t2)); Test3 t3 = new Test3(); Console.WriteLine("Test3 Size : {0}", Marshal.SizeOf(t3)); } ------------------- @ [StructLayout(LayoutKind.Sequential, Pack = 8)] public class Test1 { private int _x; public int X { get { return _x; } set { _x = value; } } } ------------------- A [StructLayout(LayoutKind.Sequential, Pack = 8)] public class Test2 { private int _x; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] private char[] _y = new char[6]]; public int X { get { return _x; } set { _x = value; } } public char[] Y { get { return _y; } set { _y = value; } } } ------------------- B [StructLayout(LayoutKind.Sequential, Pack = 8)] public class Test3 { [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] private SubTest3[] _arraySubTest; public Test3t() { _arraySubTest = new SubTest3[3]; for (int i = 0; i < 3; i++) { _arraySubTest[i] = new SubTest3(); } } public SubTest3[] ArraySubTest { get { return _arraySubTest; } set { _arraySubTest = value; } } } [StructLayout(LayoutKind.Sequential, Pack = 8)] public class SubTest3 { private int _x; private double _y; public int X { get { return _x; } set { _x = value; } } public double Y { get { return _y; } set { _y = value; } } }