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

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

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

Marshal.SizeOf(Type)为您提供封送struct的大小。 在这个答案中可以找到更多关于它为何如此工作的背景知识。