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

5Yr*_*DBA 6 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将返回定义大小,但不会返回实际的分配大小,因为可能有一些填充用于对齐?

例如:

struct MyStruct
{
   char c;
}
Run Code Online (Sandbox Code Playgroud)

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

wei*_*mat 1

只需编写一个小示例应用程序即可。
您的示例中的 MyStruct 在托管和非托管情况下的大小均为 1。
更复杂对象的实际大小还可能取决于对齐和其他依赖于操作系统的因素。