结构体是由若干成员组成的.布局有两种 1.Sequential,顺序布局,比如 struct S1 { int a; int b; } 那么默认情况下在内存里是先排a,再排b 也就是如果能取到a的地址,和b的地址,则相差一个int类型的长度,4字节 [StructLayout(LayoutKind.Sequential)] struct S1 { int a; int b; } 这样和上一个是一样的.因为默认的内存排列就是Sequential,也就是按成员的先后顺序排列. 2.Explicit,精确布局 需要用FieldOffset()设置每个成员的位置 这样就可以实现类似c的公用体的功能 [StructLayout(LayoutKind.Explicit)] struct S1 { [FieldOffset(0)] int a; [FieldOffset(0)] int b; } 这样a和b在内存中地址相同
C#-StructLayout
最新推荐文章于 2024-09-16 08:56:24 发布
本文深入探讨了C#中结构体的内存布局策略,详细解释了顺序布局与精确布局的区别,通过实例展示了如何使用FieldOffset()方法进行精确布局,以及其在实现类似类公用体功能中的应用。
8100

被折叠的 条评论
为什么被折叠?



