在C# 7.2中引入了Memory
、Span
和ArraySegment
,我想知道是否可以将非托管数组表示为一个生存在堆上的可枚举对象。
后面这个要求排除了Span
,它基本上实现了我想要的功能,例如:
unsafe { bytes = new Span<byte>((byte*)ptr + (index * Width), Width);
是否有可能使用ArraySegment
或Memory
来实现相同的功能?它们的构造函数只接受byte[]
,也许有一些方法可以欺骗C#,传递byte*
而不是byte[]
?
Span
或Memory
来做这件事呢?你可以使用Marshal.GlobalHAlloc
获取一个指向一组非托管内存的IntPtr
,直接对其进行操作。你可能可以将其转换为一个byte[]
,然后传递给那些对象。你是想创建一个新的内存块来操作,还是试图访问另一个进程的内存块? - Ron Beyerbyte[]
以进行处理,但是Skia还提供了指向非托管内存的本机指针,我想探索它,因为它可以节省内存复制。 - Red Riding HoodMemory<byte>
对于这个任务来说实际上是完美的选择... - Marc GravellMemoryManager<T>
,谢谢! - Ron Beyer