HeapAlloc

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

HeapAlloc函数从堆中分配一个内存块。分配的内存不可移动。

LPVOID HeapAlloc(

HANDLE 【hHeap】,//处理私有堆块
DWORD 【dwFlags中】,//堆分配控制标志
DWORD 【dwBytes】//要分配的字节数
); 

参数

【hHeap】

指定将从其分配内存的堆。此参数是由HeapCreateGetProcessHeap函数返回的句柄。

【dwFlags中】

指定堆分配的几个可控方面。指定任何这些标志将覆盖使用HeapCreate创建堆时指定的相应标志。您可以指定以下一个或多个标志:

含义
HEAP_GENERATE_EXCEPTIONS指定操作系统将引发异常以指示功能故障,例如内存不足情况,而不是返回NULL。
HEAP_NO_SERIALIZE指定在此函数访问堆时不会使用互斥。有关HEAP_NO_SERIALIZE的更多信息,请参阅HeapCreate的备注部分。
HEAP_ZERO_MEMORY指定分配的内存将被初始化为零。

【dwBytes】

指定要分配的字节数。

如果【hHeap】参数指定的堆是“不可生长”堆,则dwBytes必须小于0x7FFF8。通过使用非零值调用HeapCreate函数来创建一个不可扩展的堆。

返回值

如果函数成功,则返回值是指向分配的内存块的指针。

如果函数失败,并且尚未指定HEAP_GENERATE_EXCEPTIONS,返回值为NULL。

如果函数失败,并指定了HEAP_GENERATE_EXCEPTIONS,该函数可能会产生以下异常:

含义
STATUS_NO_MEMORY由于缺少可用的内存或堆损坏,分配尝试失败。
STATUS_ACCESS_VIOLATION由于堆损坏或不正确的功能参数,分配尝试失败。

请注意,堆损坏可能导致任何异常。这取决于堆腐败的性质。

如果该函数失败,则不会调用SetLastError.应用程序无法调用GetLastError扩展错误信息。

备注

如果HeapAlloc成功,则至少分配所请求的内存量。如果分配的实际数量大于请求的数量,则该过程可以使用全部金额。要确定分配块的实际大小,请使用HeapSize功能。

要释放HeapAlloc分配的内存块,请使用HeapFree功能。

HeapAlloc分配的内存不可移动。由于内存不可移动,堆可能会碎片化。

请注意,如果未指定HEAP_ZERO_MEMORY,则分配的内存将不会初始化为零。

也可以看看

GetProcessHeap, HeapCreate, HeapDestroy, HeapFree, HeapReAlloc, HeapSize, SetLastError