我认为LayoutKind.Sequential和LayoutKind.Explicit都很清楚,但是C#是如何处理LayoutKind.Auto的呢?
发布于 2012-02-08 23:42:05
LayoutKind.Auto的意思是,“我允许CLR重新排序与这些字段对应的字节”。它准确地决定了如何重新组织内存使用、打包等字段。文档中没有详细说明它将对进行哪些更改,可能是因为这是一个与您如何编写结构无关的实现细节。
如果要传递给非托管代码,这总是一件坏事,因为非托管代码要求这些字段按特定顺序排列。他们可能的重新安排必然会产生意想不到的后果。这就是为什么不能将LayoutKind.Auto结构公开给非托管代码的原因。
发布于 2012-02-08 23:39:02
documentation看起来很清楚:
运行库自动为非托管内存中的对象成员选择适当的布局。使用此枚举成员定义的对象不能在托管代码外部公开。尝试这样做会产生一个异常。
换句话说,布局是动态的,意味着您的对象不能再在托管代码之外使用。
发布于 2012-02-08 23:40:32
MS说here
默认情况下,公共语言运行库
使用“自动布局”值。为了减少与自动值相关的布局相关问题,C#、Visual Basic和C++编译器为值类型指定了顺序布局。
https://stackoverflow.com/questions/9196432
复制相似问题