I'd like to implement a C++ function (using WIN32 API) to get current memory usage of my process.
I checked code from this post How to determine CPU and memory consumption from inside a process? and implemented the function.
bool GetMemoryUsage( size_t& usageInBytes )
{
PROCESS_MEMORY_COUNTERS_EX pmc;
if ( GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*) &pmc, sizeof(pmc)) )
{
usageInBytes = pmc.WorkingSetSize;
return true;
}
else
{
return false;
}
}
However, when I try to test it like that:
size_t initialMemoryUsage = 0;
GetMemoryUsage( initialMemoryUsage );
size_t use = 596;
void* memUsed = malloc( use );
size_t memoryUsage = 0;
GetMemoryUsage( memoryUsage );
assert( memoryUsage == initialMemoryUsage + 596 );
free( memUsed );
GetMemoryUsage( memoryUsage );
assert( memoryUsage == initialMemoryUsage );
It fails:
- If
GetMemoryUsage
usespmc.WorkingSetSize
,memoryUsage
is greater thaninitialMemoryUsage
by 12288 and freeing memory does not make it decrease - If
GetMemoryUsage
usespmc.PrivateUsage
,memoryUsage
andinitialMemoryUsage
are all equal, even after I allocated some memory
How can I implement GetMemoryUsage
in an accurate and reliable way to have the test above pass?