[英]“Private Bytes” doesn't reflect it. How to find exact memory allocated by process?
這是在Windows XP上使用VS2010編譯並運行的C ++代碼示例。
它在分配前后打印“專用字節”。
void PrintPrivateBytes()
{
HANDLE current_process;
PROCESS_MEMORY_COUNTERS_EX pmc;
current_process = GetCurrentProcess();
if (!GetProcessMemoryInfo(current_process, (PPROCESS_MEMORY_COUNTERS)&pmc, sizeof(pmc)))
{
std::cout << "\nGetProcessMemoryInfo failed" ;
return;
}
std::cout << "\nProcess private bytes: " << pmc.PrivateUsage/1024 << " KB";
}
int _tmain(int argc, _TCHAR* argv[])
{
// Code demonstrating private bytes doesn't change
std::cout << "\n\nBefore allocating memory" ;
PrintPrivateBytes();
char* charptr = new char[8192];
std::cout << "\n\nAfter allocating 8 KB memory" ;
PrintPrivateBytes();
delete[] charptr;
std::cout << "\n\nAfter deleting memory" ;
PrintPrivateBytes();
int RetVal = _heapmin();
std::cout << "\n\nAfter calling _heapmin" ;
PrintPrivateBytes();
return 0;
}
輸出如下:
分配內存之前
處理專用字節:416 KB
分配內存后
處理專用字節:428 KB
刪除記憶后
處理專用字節:428 KB
調用_heapmin之后
處理專用字節:428 KB
它指示“專用字節”不反映進程的確切內存使用情況。
哪種Windows API /結構將有助於查找進程的確切內存使用情況? (工作集也沒有用。它只是反映了物理內存的使用情況)
您檢查專用字節的解決方案是正確的,只有關於_heapmin的假設是錯誤的。
_heapmin不能按說明工作。 _heapmin被記錄為“將未使用的堆內存釋放給操作系統”。
實現(請參見“ \\ Program Files(x86)\\ Microsoft Visual Studio 10.0 \\ VC \\ crt \\ src \\ heapmin.c”)
int __cdecl _heapmin(void)
{
if ( HeapCompact( _crtheap, 0 ) == 0 ) {
return -1;
}
else {
return 0;
}
}
盡管返回了堆中最大的空閑塊的大小,但是HeapCompact被記錄為通常不執行任何操作。 如果使用特殊的全局(調試目的)標志,它只會做一些額外的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.