msdnはそれを言います
sizeof演算子は、安全でないコードブロックでのみ使用できます。Marshal.SizeOfメソッドを使用できますが、このメソッドによって返される値は、sizeofによって返される値と常に同じであるとは限りません。
と
Marshal.SizeOfは、型がマーシャリングされた後のサイズを返しますが、sizeofは、**パディング**を含む共通言語ランタイムによって割り当てられたサイズを返します。
本を読んだら:clr経由のc#(522ページ)
それ :
質問:
1)ここで言及されているパディングはありますか:
本で言及されているものと同じですか?
と
2)オブジェクトタイプが-MEMORYでそのTRUEサイズPerson
を知るにはどうすればよいですか?
編集-なぜ私はそれが必要なのですか?
これに注意してください:
彼らは記録を読むサンプルを持っています:
using (var accessor = mmf.CreateViewAccessor(offset, length))
{
int colorSize = Marshal.SizeOf(typeof(MyColor)); //<--------HERE
MyColor color;
for (long i = 0; i < length; i += colorSize)
{
accessor.Read(i, out color);
color.Brighten(10);
accessor.Write(i, ref color);
}
}
}
報告されているサイズがそのようなサイズでMARSHAL.sizeOF
はないsizeOF
場合-どちらを選択する必要がありますか?それは正確でなければなりません!!
このサンプルによると、彼らはパディングを考慮していません、そして彼らは...(またはそうではない...)