读取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/