微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“私人字节”不反映它 如何find进程分配的确切内存?

以下是在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 << "nnBefore allocating memory" ; PrintPrivateBytes(); char* charptr = new char[8192]; std::cout << "nnAfter allocating 8 KB memory" ; PrintPrivateBytes(); delete[] charptr; std::cout << "nnAfter deleting memory" ; PrintPrivateBytes(); int RetVal = _heapmin(); std::cout << "nnAfter calling _heapmin" ; PrintPrivateBytes(); return 0; }

这里是输出

分配内存之前

有没有一个资源,彻底解释Windows内存?

C ++内存debugging器?

如何实时编程监视Windows交换空间的使用情况?

确定IWICStream缓冲区中已用内存的大小

有没有在C / C ++代码中使用mbind的例子?

处理专用字节:416 KB

分配内存后

处理专用字节:428 KB

删除内存后

处理专用字节:428 KB

调用_heapmin之后

处理专用字节:428 KB

它表示“专用字节”不反映进程的确切内存使用情况。

哪个Windows API /结构将有助于查找进程的确切内存使用情况? (工作集也是没有用的,它只是反映了物理内存的使用方式)

objdump vs / proc / pid / maps的虚拟内存地址?

在Ubuntu中练习缓冲区溢出攻击

Windows内存pipe理器用于确定何时开始将页面交换到磁盘的阈值是多less?

Debian上的Java本地内存泄漏

无法在64位Linux上预留9g堆

你检查私人字节的解决方案是正确的,只有你对_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通常没有记录 。 如果使用特殊的全局(调试目的)标志,它只会做一些额外的工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐