Marshal.FreeHGlobal如何才能免费无人阵列?

How Marshal.FreeHGlobal can free unmanned array?

我已经使用以下方式保留了一个无人阵列:

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

然后使用以下方法释放它:

Marshal.FreeHGlobal(ptr );

据我所知,这将正确释放内存并且不会发生内存泄漏。 我的问题:这是真的吗?如果是,它是如何工作的? Marshal 状态是否完整并存储有关每个保留数据的元数据?

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

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