当前位置: 首页 > 编程语言 > C#

固定大小结构类型数组分享

时间:2023-04-10 12:55:25 C#

固定大小结构类型数组C#中如何声明结构类型固定大小数组:[StructLayout(LayoutKind.Sequential,Pack=1),Serializable]publicunsafestructMyStruct{...}publicclassMyClass{...publicfixedMyStructmyStruct[256];这将导致CS1663:不允许使用结构类型的固定大小缓冲区,我该如何解决?我不喜欢使用C#或“托管集合数据结构”类型,因为我需要经常将其编译为本机C++如果您的C#结构仅使用原始数据类型并且具有完全相同的布局,则可以解决这些限制手动内存管理和不安全代码。作为奖励,您将通过避免编组来提高性能。分配内存:IntPtrarr=Marshal.AllocHGlobal(sizeof(MyStruct)*256);这基本上是malloc,所以内存的分配超出了GC的感知范围。您可以将IntPtr传递给本机代码,就好像它是MyStruct[256]一样,并且只会编组IntPtr,而不是它指向的内存。本机代码和托管代码可以直接访问同一块内存。要使用C#读取/写入数组中的结构,请使用C#指针:staticunsafeMyStructGetMyStructAtIndex(IntPtrarr,intindex)返回*指针;}staticunsafevoidSetMyStructAtIndex(IntPtrarr,intindex,MyStructvalue){MyStruct*ptr=((MyStruct*)arr)+索引;*指针=值;}不要忘记Marshal.FreeHGlobal(arr);完成内存后,释放它。你不能;唯一的定义限制是数组类型必须是bool、byte、char、short、int、long、sbyte、ushort、uint、ulong、float或double。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢