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 GetMemoryUsageusespmc.WorkingSetSize,memoryUsageis greater thaninitialMemoryUsageby 12288 and freeing memory does not make it decrease
- If GetMemoryUsageusespmc.PrivateUsage,memoryUsageandinitialMemoryUsageare 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?
 
     
    