获取给定System.Type的结构的sizeof

时间:2010-12-17 16:16:09

标签: c# .net sizeof

给定结构MyStruct,我可以在不安全的代码中使用sizeof(MyStruct)来获取该结构的实例大小。但是,我想获得给定结构的Type对象的结构的大小,即sizeof(typeof(MyStruct))。有Marshal.SizeOf但是会​​返回非托管编组大小,而我想要该结构的托管大小。

1 个答案:

答案 0 :(得分:5)

没有记录的方法来发现托管结构的布局。 JIT编译器很容易利用这一点,它会重新排序结构的字段以获得最佳的打包。根据{{​​1}}属性的指示,编组需要始终才能获得可预测的布局。你必须跳过[StructLayout]箍。无论你是自己动手还是让pinvoke marshaller为你做这件事。

Marshal.StructureToPtr()为您提供封送Marshal.SizeOf(Type)的大小。有关其工作原理的更多背景信息,请参见this answer