在HeapReAlloc更改内存地址后是否应该使用HeapFree?

时间:2015-08-29 01:06:54

标签: c windows winapi memory

假设以下情况:

  1. 我们使用 HeapAlloc() WINAPI函数为var X

  2. 分配一块内存
  3. 我们想使用 HeapRealloc()重新分配X

  4. HeapRealloc()调整堆大小并移动到新位置,因此指针已更改 - 我们称之为 Y

  5. HeapReAlloc 移动旧内存地址(X)后,我们是否应该执行 HeapFree ,否则 HeapReAlloc 会自动清理之前的内存地址我们的记忆指针?

1 个答案:

答案 0 :(得分:3)

没有。 HeapReAlloc()已经释放了旧地址。实际上,无论是Windows API堆函数还是标准C malloc()/ realloc()/ free(),您遇到的每个分配器都会这样做。这里是the HeapReAlloc() documentation的直接引用,但是,好的衡量标准:

  

如果HeapReAlloc失败,原始内存不会被释放,原始句柄和指针仍然有效。

     

即使新内存分配在不同的位置,也可以保证HeapReAlloc保留正在重新分配的内存的内容。保留内存内容的过程涉及可能非常耗时的内存复制操作。

这些结合起来可以得出结论,如果成功,HeapReAlloc()会释放旧的内存地址。