我使用以下方法保留了一个无人数组:
IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(array[0]) * array.Length);
然后使用:
释放它Marshal.FreeHGlobal(ptr );
据我所知,这将正确释放内存,不会发生内存泄漏。 我的问题:这是真的吗?如果是的话,那是怎么回事?是关于每个保留数据的Marshal state-full和store元数据?
答案 0 :(得分:2)
AllocHGlobal
方法公开LocalAlloc
函数。 FreeHGlobal
方法公开了LocalFree
函数。内存管理不是由任何托管组件完成的。它由这些windows api函数背后的代码完成。
回答你的问题:是的,它必须跟踪分配的大小。您可以通过调用LocalSize
函数来检索句柄的大小。说实话,我不知道它是如何在内部完成的,但你不需要知道。