获取给定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
的大小。 在这个答案中可以找到更多关于它为何如此工作的背景知识。