HeapReAlloc函数从堆中重新分配一块内存。此函数使您可以调整内存块大小并更改其他内存块属性。分配的内存不可移动。
LPVOID HeapReAlloc(
HANDLE 【hHeap】, | //处理一个堆块 |
DWORD 【dwFlags中】, | //堆重新分配标志 |
LPVOID 【Lpmen】, | //指向内存的指针重新分配 |
DWORD 【dwBytes】 | //要重新分配的字节数 |
); |
参数
【hHeap】
指定将重新分配内存的堆。这是由HeapCreate或GetProcessHeap功能返回的句柄。
【dwFlags中】
指定堆重新分配的几个可控方面。当使用HeapCreate功能创建堆时,指定任何这些标志将覆盖【flOptions】参数中指定的相应标志。您可以指定以下一个或多个标志:
旗 | 含义 |
HEAP_GENERATE_EXCEPTIONS | 指定操作系统将引发异常以指示功能故障,例如内存不足情况,而不是返回NULL。 |
HEAP_NO_SERIALIZE | 指定在此函数访问堆时不会使用互斥。有关HEAP_NO_SERIALIZE的更多信息,请参阅HeapCreate的备注部分。 |
HEAP_REALLOC_IN_PLACE_ONLY | 指定在将内存块重新分配到较大的大小时不会有任何移动。如果未指定此标志,并且重新分配请求的大小较大,则该函数可将块移动到新位置。如果指定了该标志,并且块不能放大而不移动,则功能将失败,使原始内存块保持不变。 |
HEAP_ZERO_MEMORY | 如果重新分配请求用于较大的大小,则该标志指定超出原始大小的内存的附加区域将被初始化为零。内存块的内容达到原始大小不受影响。 |
【Lpmen】
指向功能块重新分配的内存块。该指针由较早的对HeapAlloc或HeapReAlloc功能的调用返回。
【dwBytes】
指定内存块的新大小(以字节为单位)。通过使用此函数可以增加或减少内存块的大小。
如果【hHeap】参数指定的堆是“不可生长”堆,则【dwBytes】必须小于0x7FFF8。通过使用非零值调用HeapCreate函数来创建不可生成的堆。
返回值
如果函数成功,则返回值是指向重新分配的内存块的指针。
如果函数失败,并且尚未指定HEAP_GENERATE_EXCEPTIONS,返回值为NULL。
如果函数失败,并指定了HEAP_GENERATE_EXCEPTIONS,该函数可能会产生以下异常:
值 | 含义 |
STATUS_NO_MEMORY | 由于缺少可用内存,重新分配尝试失败。 |
STATUS_ACCESS_VIOLATION | 由于堆损坏或功能参数不正确,重新分配尝试失败。 |
如果函数失败,则调用SetLastError.应用程序可以调用GetLastError扩展错误信息。
备注
如果HeapReAlloc成功,则至少分配所请求的内存量。如果分配的实际数量大于请求的数量,则该过程可以使用全部金额。要确定重新分配块的实际大小,请使用HeapSize功能。
要释放HeapReAlloc分配的内存块,请使用HeapFree功能。
也可以看看
GetProcessHeap,HeapAlloc, HeapCreate, HeapDestroy, HeapFree, HeapSize, SetLastError