C# FreeHGlobal元帅如何释放无人阵列?

C# FreeHGlobal元帅如何释放无人阵列?,c#,marshalling,unmanaged-memory,C#,Marshalling,Unmanaged Memory,我已使用以下方式预订了无人阵列: IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(array[0]) * array.Length); 然后使用以下方法释放它: Marshal.FreeHGlobal(ptr ); 据我所知,这将正确释放内存,不会发生内存泄漏。 我的问题:这是真的吗?如果是,它是如何工作的?封送处理状态是否已满并存储有关每个保留数据的元数据?方法公开了LocalAlloc函数。而FreeHGlobal方法公开了LocalFr

我已使用以下方式预订了无人阵列:

IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(array[0]) * array.Length);
然后使用以下方法释放它:

Marshal.FreeHGlobal(ptr );
据我所知,这将正确释放内存,不会发生内存泄漏。
我的问题:这是真的吗?如果是,它是如何工作的?封送处理状态是否已满并存储有关每个保留数据的元数据?

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


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

所以,如果您不介意跟踪分配大小的一种方法是在分配块前面加上大小前缀,请您以更清楚的方式将它与我的问题联系起来,就像BSTR那样。你的意思是,这是在分配和自动释放过程中发生的,一切都顺利顺利地进行??我说,这是实现这一点的多种方法之一。我不知道它实际上是如何实现的。正如@thefiloe所说,这个函数只是WinAPI函数的包装器。合同规定,
FreeHGlobal
应该正确地释放
AllocHGlobal
分配的任何内容。满意的回答非常感谢