HeapReAlloc

【勇芳软件工作室】汉化HomePreviousNext

HeapReAlloc函数从堆中重新分配一块内存。此函数使您可以调整内存块大小并更改其他内存块属性。分配的内存不可移动。

LPVOID HeapReAlloc(

HANDLE 【hHeap】,//处理一个堆块
DWORD 【dwFlags中】,//堆重新分配标志
LPVOID 【Lpmen】,//指向内存的指针重新分配
DWORD 【dwBytes】//要重新分配的字节数
); 

参数

【hHeap】

指定将重新分配内存的堆。这是由HeapCreateGetProcessHeap功能返回的句柄。

【dwFlags中】

指定堆重新分配的几个可控方面。当使用HeapCreate功能创建堆时,指定任何这些标志将覆盖【flOptions】参数中指定的相应标志。您可以指定以下一个或多个标志:

含义
HEAP_GENERATE_EXCEPTIONS指定操作系统将引发异常以指示功能故障,例如内存不足情况,而不是返回NULL。
HEAP_NO_SERIALIZE指定在此函数访问堆时不会使用互斥。有关HEAP_NO_SERIALIZE的更多信息,请参阅HeapCreate的备注部分。
HEAP_REALLOC_IN_PLACE_ONLY指定在将内存块重新分配到较大的大小时不会有任何移动。如果未指定此标志,并且重新分配请求的大小较大,则该函数可将块移动到新位置。如果指定了该标志,并且块不能放大而不移动,则功能将失败,使原始内存块保持不变。
HEAP_ZERO_MEMORY如果重新分配请求用于较大的大小,则该标志指定超出原始大小的内存的附加区域将被初始化为零。内存块的内容达到原始大小不受影响。

【Lpmen】

指向功能块重新分配的内存块。该指针由较早的对HeapAllocHeapReAlloc功能的调用返回。

【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