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
函数来检索句柄的大小。老实说,我不知道它是如何在内部完成的,但你不需要知道。
我已经使用以下方式保留了一个无人阵列:
IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(array[0]) * array.Length);
然后使用以下方法释放它:
Marshal.FreeHGlobal(ptr );
据我所知,这将正确释放内存并且不会发生内存泄漏。 我的问题:这是真的吗?如果是,它是如何工作的? Marshal 状态是否完整并存储有关每个保留数据的元数据?
AllocHGlobal
方法公开了 LocalAlloc
函数。 FreeHGlobal
方法公开了 LocalFree
函数。内存管理不是由任何托管组件完成的。这是由这些 windows api 函数背后的代码完成的。
回答您的问题:是的,它必须跟踪分配的大小。您可以通过调用 LocalSize
函数来检索句柄的大小。老实说,我不知道它是如何在内部完成的,但你不需要知道。