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

例如:

struct MyStruct
{
   char c;
}

如果使用Marshal.SizeOf(),则该大小对于非托管对象(非托管大小)将为1个字节,但如果使用sizeof(,则对于托管对象(托管大小)将为2个字节或4个字节)。我对吗?

最佳答案

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

关于c# - C#非托管对象的大小是多少?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2419200/

10-17 02:23