如何固定Marshal.AllocHGlobal()分配的内存?
我的第一次尝试如下:
int bytes = 10;
IntPtr ip = Marshal.AllocHGlobal(bytes);
GCHandle iph = GCHandle.Alloc(ip, GCHandleType.Pinned);
虽然我认为这只会固定IntPtr
,而不是IntPtr
引用的内存块。
答案 0 :(得分:6)
AllocHGlobal
分配的内存已固定。返回的IntPtr
是固定位置的地址。
更新:要迂腐,你实际上不能“固定”AllocHGlobal
分配的内存,固定东西意味着告诉垃圾收集器不要将对象移动到内存中。由AllocHGlobal
分配的内存是“非托管内存”,这意味着它是不由垃圾收集器管理的内存。
除了垃圾收集器之外,没有任何进程会在程序中移动内存,垃圾收集器也不关心非托管资源。