0

我正在尝试System.Buffers.MemoryHandle在我的 C++ CLI 代码中使用。我不知道要处理它以“取消固定”底层内存。

void f(System::Memory<int> memory) {
    System::Buffers::MemoryHandle handle = memory.Pin();
    void* pointer = handle.Pointer; 

    // Work with the pointer

    handle.Dispose(); // error C2039: 'Dispose': is not a member of 'System::Buffers::MemoryHandle'
}

我也试过拳击,同样的错误。

IDisposable^ disposable = handle;
disposable->Dispose(); // error C2039: 'Dispose': is not a member of 'System::IDisposable'

处理值类型实例的正确方法是什么?

4

2 回答 2

2

正如汉斯在他们的评论中指出的那样,您可以使用delete handle.

Visual Studio 会抱怨expression must have pointer or handle type,但代码将毫无问题地编译和运行。

于 2021-02-03T08:26:56.130 回答
0

您必须调用Unpin(). MemoryManager根据微软文档

取消固定内存,以便垃圾收集器可以自由移动它。

于 2021-01-25T12:48:46.397 回答