ubuntu下C/C++获取剩余内存

#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.\n", 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\n");
        return -1;
    }
    char keyword[20];
    char valuech[20];
    long mem        =0;
    long free_mem   =0;
    fscanf(file,"MemTotal: %s kB\n",keyword);
    mem=atol(keyword)/1000;
    fscanf(file,"MemFree: %s kB\n",valuech);
    fscanf(file,"MemAvailable: %s kB\n",valuech);
    free_mem=atol(valuech)/1000;
    fclose(file);
    fprintf(stderr,"Memory %ld MB\\%ld MB.\n", mem, free_mem);
    return (long)(free_mem);
}

与在GUI中可见的剩余内存相同,推荐作为参考方法

posted @ 2019-04-26 20:39  aimhabo  阅读(1033)  评论(0编辑  收藏  举报