C++获取内存使用情况小结
在程序编程过程中,为了防止出现内存泄漏情况出现,需要持续关注内存程序内存占用情况。如下方式实现获取当前进程内存使用情况:
linux:
void my_top(string path, bool flag) { if(flag) { FILE* read_top = fopen("/proc/self/status", "r"); char line_rss[128]; unsigned long long Pid, VmSize, VmRSS; while (fgets(line_rss, 128, read_top) != NULL) { if (strncmp(line_rss, "Pid:", 4) == 0) { string str(line_rss + 4); Pid = strtoull(str.c_str(), NULL, 19); } if (strncmp(line_rss, "VmSize:", 7) == 0) { string str(line_rss + 7); VmSize = strtoull(str.c_str(), NULL, 19); } if (strncmp(line_rss, "VmRSS:", 6) == 0) { string str(line_rss + 6); VmRSS = strtoull(str.c_str(), NULL, 19); } if(Pid < 0 || VmSize < 0 || VmRSS < 0) { fclose(read_top); break; } } fclose(read_top); ofstream writer_top(path, ios::app); writer_top << Pid << " " << VmSize << " " << VmRSS << endl; writer_top.close(); } else { ofstream writer_top(path, ios::app); writer_top << "0" << " " << "0" << " " << "0" << endl; writer_top.close(); } }
其他资源:
VmPeak: 表示进程所占用最大虚拟内存大小
VmSize: 表示进程当前虚拟内存大小
VmLck: 表示被锁定的内存大小
VmHWM: 表示进程所占用物理内存的峰值
VmRSS: 表示进程当前占用物理内存的大小(与procrank中的RSS)
VmData: 表示进程数据段的大小
VmStk: 表示进程堆栈段的大小
VmExe: 表示进程代码的大小
VmLib: 表示进程所使用共享库的大小
VmPTE: 表示进程页表项的大小
windows:
#include <windows.h> #include <psapi.h> #include <stdio.h> int main() { PROCESS_MEMORY_COUNTERS pmc; if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc))) { printf("当前进程占用内存大小为:%d KB\n", pmc.WorkingSetSize / 1024); } return 0; }
到此这篇关于C++获取内存使用情况小结的文章就介绍到这了,更多相关C++获取内存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Mac OS上搭建Apache+PHP+MySQL开发环境的详细教程
这篇文章主要介绍了Mac OS上搭建Apache+PHP+MySQL开发环境的详细教程,包括常见的PHP连接MySQL失败问题的解决办法,需要的朋友可以参考下2016-01-01C++ Primer Plus 第四章之C++ Primer Plus复合类型学习笔记
数组(array)是一种数据格式,能够存储多个同类型的值。每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素,今天给大家重点介绍C++ Primer Plus复合类型的实例详解,感兴趣的朋友一起看看吧2021-07-07
最新评论