構造体のアライメントを設定する - C#

構造体のアライメントを設定する場合にはStructLayout属性(StructLayoutAttribute)を利用します。
StructLayoutはSystem.Runtime.InteropServices名前空間にあるため、
using System.Runtime.InteropServices;
が必要です。

記述した順番通りに配置される例

[StructLayout(LayoutKind.Sequential)]
struct POINT {
  public int x;
  public int y;
}

FieldOffsetで指定した位置に配置される例

[StructLayout(LayoutKind.Explicit)]
struct POINT
{
  [FieldOffset(0)]
  public int x;
  [FieldOffset(4)]
  public int y;
}

16バイトアライメントで配置される例

[StructLayout(LayoutKind.Sequential, Pack=16)]
struct POINT
{
  public int x;
  public int y;
}

16バイトアライメントで配置し構造体のサイズを64バイトにする例

[StructLayout(LayoutKind.Sequential, Pack = 16, Size=64)]
struct POINT3
{
  public int x;
  public int y;
}

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2010-08-13
iPentec all rights reserverd.