Heapcreate和Heapalloc
HeapCreate()
这个函数创建一个只有调用进程才能访问的私有堆。进程从虚拟地址空间里保留出一个连续的块并且为这个块特定的初始部分分配物理空间。
返回值:
成功:一个指向新创建的堆的指针
失败:NULL
调用函数GetLastError获得更多的错误信息。
这个函数在调用进程里创建一个私有堆,进程可调用HeapAlloc函数分配内存空间。这些页在进程的虚拟空间内创建了一个块,在那里堆可以增长。
如果HeapAlloc函数请求的空间超过了现有的页的大小,如果物理空间足够的话,额外的空间将会从已保留的空间里增加。
只有创建私有堆的进程可以访问私有堆。
如果一个DLL(动态链接库)创建了一个私有堆,那么这个私有堆是在调用该DLL的进程的地址空间内,且仅该进程可访问。
系统会使用私有堆的一部分空间去储存堆的结构信息,所以,不是所有的堆内空间对进程来说是可用的。例如:HeapAlloc函数从一个最大大小为64KB的堆里申请64KB的空间,由于系统占用的一部分空间,这个请求通常会失败。
HeapAlloc()
返回值:
如果函数成功,则返回值是指向分配的内存块的指针。
如果函数失败并且您尚未指定HEAP_GENERATE_EXCEPTIONS,则返回值为 NULL。
如果函数失败并且您指定了HEAP_GENERATE_EXCEPTIONS,则该函数可能会生成下表中列出的任一异常。特定异常取决于堆损坏的性质。有关详细信息,请参阅 GetExceptionCode。
异常代码 描述
STATUS_NO_MEMORY 由于可用内存不足或堆损坏,分配尝试失败。
STATUS_ACCESS_VIOLATION 由于堆损坏或函数参数不正确,分配尝试失败。
如果函数失败,则不会调用 SetLastError。应用程序无法调用 GetLastError 以获取扩展的错误信息。