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