#include <stdio.h> #include <unistd.h> long get_memory_usage() { long page_size = sysconf (_SC_PAGESIZE); long num_pages = sysconf (_SC_PHYS_PAGES); long mem = (num_pages/1024) * (page_size/1024); long long free_pages = sysconf (_SC_AVPHYS_PAGES); long long free_mem = (free_pages/1024) * (page_size/1024); fprintf(stderr,"Memory %lld MB\%lld MB. ", mem, free_mem); return (long)(free_mem); }
获取结果与System Monitor中的不一致,不过内存管够的情况下一般在150~200MB之间波动,重启阈值设在100MB可以凑合用
另一方法
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> long get_memory_usage() { FILE*file=fopen("/proc/meminfo","r"); if(file == NULL){ fprintf(stderr,"cannot open /proc/meminfo "); return -1; } char keyword[20]; char valuech[20]; long mem =0; long free_mem =0; fscanf(file,"MemTotal: %s kB ",keyword); mem=atol(keyword)/1000; fscanf(file,"MemFree: %s kB ",valuech); fscanf(file,"MemAvailable: %s kB ",valuech); free_mem=atol(valuech)/1000; fclose(file); fprintf(stderr,"Memory %ld MB\%ld MB. ", mem, free_mem); return (long)(free_mem); }
与在GUI中可见的剩余内存相同,推荐作为参考方法