Dav*_*nan 19
黄金法则是您必须从用于分配内存的同一堆中释放.
如果使用它进行分配,则malloc()必须使用free()相同的C RTL 取消分配.同样在管理方面,AllocHGlobal()应该平衡FreeHGlobal().
现在,AllocHGlobal()通过调用Win32函数实现LocalAlloc.因此,您可以LocalFree通过本机调用释放此类内存.反之亦然.
如果要使用本机和托管之间共享的堆,则更常见的是使用COM堆.在原生方面使用CoTaskMemAlloc()和CoTaskMemFree().在管理方面使用Marshal.AllocCoTaskMem()和Marshal.FreeCoTaskMem().
但是,您应该避免像这样设计系统.坚持一个规则是更加简单,即在托管端分配的所有内存都在那里被释放,同样对于本机端.如果你不遵守这条规则,你可能很快就会忘记谁负责什么.