以下是在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 举报,一经查实,本站将立刻删除。