繁体   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