Ich möchte eine C++ - Funktion (mit WIN32-API) implementieren, um die aktuelle Speichernutzung meines Prozesses zu erhalten.So überprüfen Sie die Speicherauslastung
Ich überprüfte Code von diesem Beitrag How to determine CPU and memory consumption from inside a process? und implementierte die Funktion.
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;
}
}
Allerdings, wenn ich versuche, es zu testen, wie folgt aus:
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);
Es schlägt fehl:
- Wenn
GetMemoryUsage
pmc.WorkingSetSize
verwendet,memoryUsage
größer alsinitialMemoryUsage
von 12288 und befreien Speicher tut nicht verringern - Wenn
GetMemoryUsage
verwendet,memoryUsage
undinitialMemoryUsage
sind alle gleich, auch nachdem ich einige Speicher zugewiesen
Wie kann ich GetMemoryUsage
auf eine genaue und zuverlässige Art und Weise implementieren, um die Prüfung über den Ball zu haben?
Ihre Erwartungen darüber, wie Prozesse Speicher verwenden, sind einfach falsch. Die Ergebnisse, die Sie erhalten haben, sind korrekt und zeigen Ihnen, was tatsächlich passiert. –
OK, also gibt es eine Möglichkeit zu wissen, wann etwas Speicher zugewiesen wurde und wie viel? Oder ist das einfach unmöglich? – jpo38
Es hängt davon ab, was Sie mit "Speicher" meinen und was Sie mit "allokiert" meinen. Sie sehen gerade, wann Speicher zugewiesen ist und wie viel. Es ist einfach nicht die Art von Erinnerung, die du denkst. (Physisch? Virtual? Reserviert? Resident? Oder was?) Und es ist nicht "zugeordnet" wie Sie denken. (Reserviert? Mapped? Enthält nützliche Daten? Oder was?) Ohne genau zu wissen, was Sie zu tun versuchen, ist es schwer, Ihnen dabei zu helfen. Auf welche Frage antwortest du? Sei so genau wie du kannst. –