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

cyc*_*tic 0 .net c# pinvoke garbage-collection marshalling

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

我的第一次尝试如下:

int bytes = 10;
IntPtr ip = Marshal.AllocHGlobal(bytes);
GCHandle iph = GCHandle.Alloc(ip, GCHandleType.Pinned);
Run Code Online (Sandbox Code Playgroud)

虽然我认为这只是引脚IntPtr而不是引用的内存块IntPtr.

Sco*_*ain 6

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

更新:要迂腐,你实际上不能"固定"分配的内存AllocHGlobal,固定东西意味着告诉垃圾收集器不要在内存中移动对象.分配的内存AllocHGlobal是"非托管内存",这意味着它是不由垃圾收集器管理的内存.

除垃圾收集器之外的任何进程都不会在程序中移动内存,垃圾收集器不关心非托管资源.