StructLayout.Auto与sequential和Explicit相比意味着什么
本文关键字:意味着 什么 Explicit Auto sequential StructLayout | 更新日期: 2023-09-27 18:23:52
我认为LayoutKind.Sequential和LayoutKind.Explicit很清楚,但C#如何处理LayoutKind.Auto?
LayoutKind.Auto
的意思是,"我授予CLR重新排序与这些字段对应的字节的权限"。它确切地决定了如何为内存使用、打包等重新组织字段文档中没有具体说明它将进行哪些更改,可能是因为它是一个与如何编写结构无关的实现细节。
如果传递给非托管代码,这总是一件坏事,因为非托管代码要求这些字段按特定顺序排列。他们可能的重新安排必然会产生意想不到的后果。这就是为什么不能将LayoutKind.Auto
结构公开给非托管代码的原因。
文档似乎很清楚:
运行时会自动为非托管内存中对象的成员。使用此定义的对象枚举成员不能在托管代码之外公开。尝试这样做会生成异常。
换句话说,布局是动态的,这意味着您的对象不能再在托管代码之外使用。
MS在此处显示
默认情况下,公共语言运行库使用"自动布局"值。到减少与Auto值C#相关联的布局相关问题,Visual Basic和C++编译器指定值的顺序布局类型。
运行时会自动为非托管内存中的对象成员选择适当的布局。