原文链接 -> 传送门
函数功能:
HeapSize 函数用于获取由 HeapAlloc 函数或 HeapReAlloc 函数从堆中分配的内存块大小。
API 函数原型:
注释:_In_ 说明该参数是输入的。
SIZE_T WINAPI HeapSize( _In_ HANDLE hHeap, _In_ DWORD dwFlags, _In_ LPCVOID lpMem );
参数解析:
|
参数 |
含义 |
||||
|
hHeap |
1. 指向内存块所在的堆句柄 |
||||
|
dwFlags |
1. 堆内存大小选项
|
||||
|
lpMem |
1. 指向由 HeapSize 函数获得内存块大小的指针 |
返回值:
1. 如果函数调用成功,返回值是被请求分配的内存块的大小,单位字节;
2. 如果函数调用失败,返回值是 (SIZE_T) - 1。如果先前没有调用 SetLastError 函数设置错误信息,应用程序不能调用GetLastError 函数获取相关错误信息;
3. 如果 lpMem 指针指向分配的堆内存不在 hHeap 句柄指向的内存区域内,HeapSize 函数操作的未定义。
备注:
当两个或两个以上的线程试图同时从相同堆分配或释放内存块时,序列化确保互斥。序列化有小小的性能损耗,但当多个线程从相同堆分配和释放内存时,它必须使用。设置 HEAP_NO_SERIALIZE 参数值消除堆中互斥。如果没有序列化,使用相同堆句柄的两个或两个以上的线程可能试图同时分配或释放内存,可能导致堆溢出。因此,HEAP_NO_SERIALIZE 值仅在以下情况下安全地使用:
· 进程只有一个线程
· 进程有多个线程,但一个堆中只有一个线程在使用
· 进程有多个线程,但应用程序使用堆时,有互斥解决方案
需求:
|
Minimum supported client |
Windows XP [桌面应用程序 | Windows Store 程序] |
|
Minimum supported server |
Windows 2003 服务器版 [桌面应用程序 | Windows Store 程序] |
|
Minimum supported phone |
Windows Phone 8 |
|
Header |
HeapApi.h (包含于 Windows.h); |
|
Library |
Kernel32.lib |
|
DLL |
Kernel32.dll |




