Tag: 位打包

使用reflection来确定.Net类型在内存中的布局方式

我正在尝试在C#中优化解析器组合器。 当序列化格式与内存格式匹配时,一种可能的优化是仅对要在实例上解析的数据的(不安全)memcpy甚至该类型的许多实例进行解析。 我想编写确定内存中格式是否与序列化格式匹配的代码,以便动态确定是否可以应用优化。 (显然这是一个不安全的优化,可能无法解决一大堆微妙的原因。我只是在尝试,而不是计划在生产代码中使用它。) 我使用属性[StructLayout(LayoutKind.Sequential,Pack = 1)]强制不填充并强制内存顺序匹配声明顺序。 我用reflection检查该属性,但实际上所有这些都证实是“无填充”。 我还需要字段的顺序。 (我非常希望不必为每个字段手动指定FieldOffset属性,因为这很容易出错。) 我假设我可以使用GetFields返回的字段顺序,但文档明确指出订单未指定。 鉴于我使用StructLayout属性强制字段的顺序,有没有办法反映该排序? 编辑我很好,所有字段必须是blittable的限制 。