https://www.cnblogs.com/cxjchen/archive/2013/03/30/2990548.html
查看RAM使用情况最简单的方法是通过/proc/meminfo
。这个动态更新的虚拟文件实际上是许多其他内存相关工具(如:free / ps / top)等的组合显示。/proc/meminfo
列出了所有你想了解的内存的使用情况。
进程的内存使用信息也可以通过/proc/<pid>/statm 和 /proc/<pid>/status 来查看。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> //头文件 #include <assert.h> int get_phy_mem(const pid_t p) { char file[64] = {0};//文件名 FILE *fd; //定义文件指针fd char line_buff[256] = {0}; //读取行的缓冲区 sprintf(file,"/proc/%d/status",p);//文件中第11行包含着 fprintf (stderr, "current pid:%d ", p); fd = fopen (file, "r"); //以R读的方式打开文件再赋给指针fd //获取vmrss:实际物理内存占用 int i; char name[32];//存放项目名称 int vmrss;//存放内存峰值大小 for (i=0;i<VMRSS_LINE-1;i++) { fgets (line_buff, sizeof(line_buff), fd); }//读到第15行 fgets (line_buff, sizeof(line_buff), fd);//读取VmRSS这一行的数据,VmRSS在第15行 sscanf (line_buff, "%s %d", name,&vmrss); fprintf (stderr, "====%s:%d==== ", name,vmrss); fclose(fd); //关闭文件fd return vmrss; } int get_rmem(pid_t p) { return get_phy_mem(p); } int get_total_mem() { char* file = "/proc/meminfo";//文件名 FILE *fd; //定义文件指针fd char line_buff[256] = {0}; //读取行的缓冲区 fd = fopen (file, "r"); //以R读的方式打开文件再赋给指针fd //获取memtotal:总内存占用大小 int i; char name[32];//存放项目名称 int memtotal;//存放内存峰值大小 fgets (line_buff, sizeof(line_buff), fd);//读取memtotal这一行的数据,memtotal在第1行 sscanf (line_buff, "%s %d", name,&memtotal); fprintf (stderr, "====%s:%d==== ", name,memtotal); fclose(fd); //关闭文件fd return memtotal; } float get_pmem(pid_t p) { int phy = get_phy_mem(p); int total = get_total_mem(); float occupy = (phy*1.0)/(total*1.0); fprintf(stderr,"====process mem occupy:%.6f ====",occupy); return occupy; }