如何在 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" 这意味着它是不受垃圾收集器管理的内存。
除了垃圾收集器之外,没有进程会在您的程序中移动内存,并且垃圾收集器不关心非托管资源。
如何固定由 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" 这意味着它是不受垃圾收集器管理的内存。
除了垃圾收集器之外,没有进程会在您的程序中移动内存,并且垃圾收集器不关心非托管资源。