给定结构MyStruct
,我可以在不安全的代码中使用sizeof(MyStruct)
来获取该结构的实例大小。但是,我想获得给定结构的Type
对象的结构的大小,即sizeof(typeof(MyStruct))
。有Marshal.SizeOf
但是会返回非托管编组大小,而我想要该结构的托管大小。
答案 0 :(得分:5)
没有记录的方法来发现托管结构的布局。 JIT编译器很容易利用这一点,它会重新排序结构的字段以获得最佳的打包。根据{{1}}属性的指示,编组需要始终才能获得可预测的布局。你必须跳过[StructLayout]
箍。无论你是自己动手还是让pinvoke marshaller为你做这件事。
Marshal.StructureToPtr()
为您提供封送Marshal.SizeOf(Type)
的大小。有关其工作原理的更多背景信息,请参见this answer。