내 프로세스의 현재 메모리 사용량을 얻기 위해 (WIN32 API를 사용하는) C++ 함수를 구현하고 싶습니다.메모리 사용을 확인하는 방법
이 게시물 How to determine CPU and memory consumption from inside a process?에서 코드를 확인하고 기능을 구현했습니다. 그러나
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;
}
}
, 나는 그런 식으로 테스트하려고하면 실패
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);
: GetMemoryUsage
이 pmc.WorkingSetSize
를 사용
- 경우
memoryUsage
이 12288에 의해initialMemoryUsage
보다 크고 자유롭게 메모리가 않습니다 감소시키지 마십시오 GetMemoryUsage
이pmc.PrivateUsage
,memoryUsage
및initialMemoryUsage
내가 패스 위의 검사를 할 수있는 정확하고 신뢰할 수있는 방법으로 일부 메모리
GetMemoryUsage
을 할당 후에도, 모두 동일?
프로세스에서 메모리를 사용하는 방법에 대한 기대가 잘못되었습니다. 얻은 결과가 정확하고 실제로 무엇이 일어나고 있는지 보여줍니다. –
OK, 메모리가 할당 된 시간과 용량을 알 수있는 방법이 있습니까? 아니면 단순히 불가능한가요? – jpo38
"메모리"와 "할당 된"의 의미에 따라 다릅니다. 현재 메모리가 할당 된 시간과 용량을보고 있습니다. 그것은 당신이 생각하는 기억의 종류가 아닙니다. (Physical? Virtual? Reserved? Resident? 또는 무엇?) 그리고 그것은 당신이 생각하는대로 "할당"되지 않습니다. (예약 되었습니까? 유용한 데이터를 포함하고 있는지, 아니면 무엇을 포함합니까?) 정확히 무엇을 하려는지 알지 못하면 그렇게하는 것이 어렵습니다. 무슨 질문을 하시겠습니까? 가능한 한 구체적으로하십시오. –