Marshal.FreeHGlobal如何释放无人阵列?

时间:2015-10-03 08:52:10

标签: c# marshalling unmanaged-memory

我使用以下方法保留了一个无人数组:

IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(array[0]) * array.Length);

然后使用:

释放它
Marshal.FreeHGlobal(ptr );

据我所知,这将正确释放内存,不会发生内存泄漏。 我的问题:这是真的吗?如果是的话,那是怎么回事?是关于每个保留数据的Marshal state-full和store元数据?

1 个答案:

答案 0 :(得分:2)

AllocHGlobal方法公开LocalAlloc函数。 FreeHGlobal方法公开了LocalFree函数。内存管理不是由任何托管组件完成的。它由这些windows api函数背后的代码完成。

回答你的问题:是的,它必须跟踪分配的大小。您可以通过调用LocalSize函数来检索句柄的大小。说实话,我不知道它是如何在内部完成的,但你不需要知道。