#include<Windows.h>
#include<tchar.h>
#include<stdio.h>
#include<intsafe.h>
int __cdecl _tmain() {
DWORD NumberOfHeaps;
DWORD HeapsIndex;
DWORD HeapsLength;
HANDLE hDefaultProcessHeap;
HRESULT Result;
PHANDLE aHeaps;
SIZE_T BytesToAllocate;
//获取当前进程的堆大小
//Retrieve the number of active heaps for the current process
NumberOfHeaps = GetProcessHeaps(0, NULL);//null turn out current process itself
if (!NumberOfHeaps) {
return -1;
}
wprintf(L"Heap Size:%d\n", NumberOfHeaps);
//
// Calculate the buffer size.
//
Result = SIZETMult(NumberOfHeaps, sizeof(*aHeaps), &BytesToAllocate);
if (FAILED(Result)) {
return -1;
}
wprintf(L"Bytes to Allocation:%ld\n", BytesToAllocate);
//
// Get a handle to the default process heap.
//
hDefaultProcessHeap = GetProcessHeap();
if (!hDefaultProcessHeap) {
return -1;
}
wprintf(L"GetProcessHeap OK\n");
//
// Allocate the buffer from the default process heap.
//
aHeaps = (PHANDLE)HeapAlloc(hDefaultProcessHeap, 0, BytesToAllocate);
if (!aHeaps) {
return -1;
}
wprintf(L"HeapAlloc OK\n");
HeapsLength = NumberOfHeaps;
//
// Retrieve handles to the process heaps and print them to stdout.
// Note that heap functions should be called only on the default heap of the process
// or on private heaps that your component creates by calling HeapCreate.
// calc aHeap size
//
NumberOfHeaps = GetProcessHeaps(HeapsLength, aHeaps);
wprintf(L"GetProcessHeaps,return value %d\n", NumberOfHeaps);
//
// Release memory allocated from default process heap.
//
if (HeapFree(hDefaultProcessHeap, 0, aHeaps) != FALSE) {
wprintf(L"HeapFree OK");
}
return 0;
}
Heap Size:3
Bytes to Allocation:24
GetProcessHeap OK
HeapAlloc OK
GetProcessHeaps,return value 3
HeapFree OK