簡體   English   中英

“私人字節”沒有反映出來。 如何找到進程分配的確切內存?

[英]“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM