1

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

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

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

Marshal.FreeHGlobal(ptr );

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

4

1 回答 1

2

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

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

于 2015-10-03T09:10:55.413 回答