假设以下情况:
我们使用 HeapAlloc() WINAPI函数为var X
我们想使用 HeapRealloc()重新分配X
HeapRealloc()调整堆大小并移动到新位置,因此指针已更改 - 我们称之为 Y
在 HeapReAlloc 移动旧内存地址(X)后,我们是否应该执行 HeapFree ,否则 HeapReAlloc 会自动清理之前的内存地址我们的记忆指针?
答案 0 :(得分:3)
没有。 HeapReAlloc()已经释放了旧地址。实际上,无论是Windows API堆函数还是标准C malloc()/ realloc()/ free(),您遇到的每个分配器都会这样做。这里是the HeapReAlloc() documentation的直接引用,但是,好的衡量标准:
如果HeapReAlloc失败,原始内存不会被释放,原始句柄和指针仍然有效。
即使新内存分配在不同的位置,也可以保证HeapReAlloc保留正在重新分配的内存的内容。保留内存内容的过程涉及可能非常耗时的内存复制操作。
这些结合起来可以得出结论,如果成功,HeapReAlloc()会释放旧的内存地址。