如何在 C# 中固定 Marshal.AllocHGlobal() 分配的内存?

How to pin memory allocated by Marshal.AllocHGlobal() in C#?

如何固定由 Marshal.AllocHGlobal() 分配的内存?

我的第一次尝试如下:

int bytes = 10;
IntPtr ip = Marshal.AllocHGlobal(bytes);
GCHandle iph = GCHandle.Alloc(ip, GCHandleType.Pinned);

尽管我认为这只会固定 IntPtr 而不是 IntPtr 引用的内存块。

AllocHGlobal分配的内存已经固定。返回的 IntPtr 是固定位置的地址。

更新:为了迂腐,你实际上不能 "pin" AllocHGlobal 分配的内存,固定一些东西意味着告诉垃圾收集器不要移动内存中的对象。 AllocHGlobal 分配的内存是 "unmanaged memory" 这意味着它是不受垃圾收集器管理的内存。

除了垃圾收集器之外,没有进程会在您的程序中移动内存,并且垃圾收集器不关心非托管资源。