msdn表示:
sizeof运算符只能在不安全的代码块中使用。虽然您可以使用Marshal.SizeOf方法,但此方法返回的值并不总是与sizeof返回的值相同。
以及
Marshal.SizeOf在类型进行了编组后返回大小,而sizeof返回已由公共语言运行时分配的大小,包括任何填充。
我曾经在书中读到过:c# via clr (第522页)
这样说:
问题:
1)这里提到的填充是否为:
这是否与书中提到的相同?
和
2)如果我有一个Person
对象类型-如何知道它在内存中的真实大小?
编辑-为什么我需要它?
请注意this:
他们有一个阅读记录的样本:
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
不同,那么应该选择哪个?它必须准确!!根据这个示例,他们没有考虑填充,但他们应该...(或者不应该...)