c# – 将指向结构的指针的FieldOffset设置为与固定字节数组相同
我是stackoverflow的新手,我会对C#结构及其布局有疑问.
我们假设以下结构: [StructLayout(LayoutKind.Sequential,Pack = 1)] public unsafe struct Link { // some primitive data (2 integers for example) } [StructLayout(LayoutKind.Explicit,Pack = 1)] public unsafe struct Node { [FieldOffset(0)] public int LinkCount; [FieldOffset(4)] public Link* Links; [FieldOffset(4)] private fixed byte _linksData[10 * sizeof(Link)]; } 原因是我需要一个用于IO-Performance的blittable类型. 我希望,链接只会指向与_linksData相同的内存位置,因为它具有相同的FieldOffset. 所以我的问题是: 感谢提前的每一个答案 – 马库斯 在阅读了Ben Voigt的帖子之后,我尝试了类似的东西而不需要将结构更改为类.以下是它对我有用的方式: [StructLayout(LayoutKind.Explicit,Pack = 1)] public unsafe struct Node { [FieldOffset(0)] public int LinkCount; [FieldOffset(4)] private fixed byte _linksData[10 * sizeof(Link)]; public Link* GetLinks() { fixed(byte* pLinksData = _linksData) { return (Link*)pLinksData; } } } 解决方法
我猜你实际上并没有尝试存储指针,只是有一种正确类型的方式来访问10个元素.怎么样:
[StructLayout(LayoutKind.Explicit,Pack = 1)] public unsafe struct Node { [FieldOffset(0)] public int LinkCount; [FieldOffset(4)] private fixed byte _linksData[10 * sizeof(Link)]; public Link* Links { get { return _linksData; } }; } 不,等等,.NET支持内部指针,但C#没有,所以这不起作用.如果你已经固定它或将它放在堆栈上,你只能有一个指向.NET对象的指针,我们不知道这是不是这样.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |