構造体/クラスを使用する場合、サイズは常に特定のサイズに揃えられます。アーキテクチャごとに異なる場合がありますが、通常は4であるため、ブール値の後にintがある場合は、4の乗算から開始し、プロセッサが4バイトを読み取るようにします。チャンク。
これは、クラス(または構造)のメンバーの順序を設定するときに考慮する価値のあるものです。
例:
[StructLayout(LayoutKind.Sequential)]
public struct Sample1
{
public bool a1;//take 1 byte but align to 4
}
public struct Sample2
{
public bool a1;//take 1 byte but align to 4
public int a2;//take 4 bytes (32bit machine) start at a multiplication of 4
public bool a3;//take 1 byte but align to 4
}
public struct Sample3
{
//here the compiler (with the right optimizations) can put all the bools one after the other without breaking the alignment
public bool a1;
public bool a2;
public bool a3;
public bool a4;
public int a5;
}
int size1 = Marshal.SizeOf(typeof (Sample1)); // 4
int size1 = Marshal.SizeOf(typeof (Sample2)); // 12
int size1 = Marshal.SizeOf(typeof (Sample3)); // 8
int size2 = sizeof (bool); // 1