首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与顺序和显式相比,StructLayout.Auto意味着什么?

与顺序和显式相比,StructLayout.Auto意味着什么?
EN

Stack Overflow用户
提问于 2012-02-08 23:36:52
回答 4查看 668关注 0票数 1

我认为LayoutKind.Sequential和LayoutKind.Explicit都很清楚,但是C#是如何处理LayoutKind.Auto的呢?

EN

回答 4

Stack Overflow用户

发布于 2012-02-08 23:42:05

LayoutKind.Auto的意思是,“我允许CLR重新排序与这些字段对应的字节”。它准确地决定了如何重新组织内存使用、打包等字段。文档中没有详细说明它将对进行哪些更改,可能是因为这是一个与您如何编写结构无关的实现细节。

如果要传递给非托管代码,这总是一件坏事,因为非托管代码要求这些字段按特定顺序排列。他们可能的重新安排必然会产生意想不到的后果。这就是为什么不能将LayoutKind.Auto结构公开给非托管代码的原因。

票数 4
EN

Stack Overflow用户

发布于 2012-02-08 23:39:02

documentation看起来很清楚:

运行库自动为非托管内存中的对象成员选择适当的布局。使用此枚举成员定义的对象不能在托管代码外部公开。尝试这样做会产生一个异常。

换句话说,布局是动态的,意味着您的对象不能再在托管代码之外使用。

票数 1
EN

Stack Overflow用户

发布于 2012-02-08 23:40:32

MS说here

默认情况下,公共语言运行库

使用“自动布局”值。为了减少与自动值相关的布局相关问题,C#、Visual Basic和C++编译器为值类型指定了顺序布局。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9196432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档