C#非托管对象的大小是多少?

时间:2010-03-10 17:46:48

标签: c#

读取Marshal.SizeOf().的定义它说:The size returned is the size of the unmanaged object. The unmanaged and managed sizes of an object can differ.这是否意味着Marshal.SizeOf会返回定义大小但不会返回实际的分配大小,因为可能有一些填充用于对齐?< / p>

例如:

struct MyStruct
{
   char c;
}

如果我使用Marshal.SizeOf(),则非托管对象(非托管大小)的大小为1个字节;如果使用sizeof(,则托管对象(托管大小)可能为2或4个字节。我是对的吗?

2 个答案:

答案 0 :(得分:2)

Marshal.SizeOf的唯一含义是Marshal.StructureToPtr方法所需的非托管内存块的大小。 SizeOf可能不等于托管结构大小和非托管结构大小。 StructureToPtr可以使用或不使用填充来序列化结构,它是内部细节。 SizeOf仅报告此操作需要多少内存,以及其他任何内容。

答案 1 :(得分:1)

只需编写一个小例子App。
您的示例中的MyStruct在托管和非托管情况下的大小为1 更复杂对象的实际大小也可能取决于对齐和其他依赖于操作系统的事物。