C#中固定编译时不确定数量的变量(相关话题fixed固定多个数组)

以交错数组byte[][]为例。

fixed无法固定byte[][],只能在编译时固定确定数量的变量。

交错数组byte[][]中的每一个byte[]可以采用GCHandle进行固定。

int n = 10;
                var arrays = new byte[n][];
                var arrHandles = new GCHandle[n];
                var size = 100;
                try
                {
                    for (int i = 0; i < n; i++)
                    {
                        arrays[i] = new byte[size];
                        srcPtrs[i] = GCHandle.Alloc(srcBgras, GCHandleType.Pinned);
                    }
                    //所有数组的指针
                    var ptrs = arrHandles.Select( handle => handle.AddrOfPinnedObject()).ToArray();
                }
                finally
                {
                    for (int i = 0; i < n; i++)
                        arrHandles[i].Free();
                }
示例

 

posted @ 2023-08-08 15:51  陈百川  阅读(18)  评论(0)    收藏  举报