两种办法都可以,结果一样:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#define PROCESS_STATM  "/proc/self/statm"
#define PROCESS_STATUS "/proc/self/status"

void get_memory1(int* info)
{
    FILE *file = fopen(PROCESS_STATM, "r");
    if (!file) {
        WY_LOG_INFO("Failed to open %s", PROCESS_STATM);
        return;
    }
    
    long size, resident, share, text, lib, data, dt;
    if (fscanf(file, "%ld %ld %ld %ld %ld %ld %ld", 
               &size, &resident, &share, &text, &lib, &data, &dt) != 7) {
        fclose(file);
        return;
    }
    fclose(file);
    
    long page_size = sysconf(_SC_PAGESIZE)/1024; // 通常为4096字节

    //物理内存(RSS), KB
    info[0] = resident * page_size;

    //虚拟内存, KB
    info[1] = size     * page_size;

    //共享内存, KB
    info[2] = share    * page_size;
}

void get_memory2(int* info)
{
    FILE *file = fopen(PROCESS_STATUS, "r");
    if (!file) return;
    
    char line[128];
    while (fgets(line, sizeof(line), file)) {
        if (strncmp(line, "VmRSS:", 6) == 0) {      // 物理内存
            //物理内存
            info[0] = atoi(line + 6);
        } else if (strncmp(line, "VmSize:", 7) == 0) { // 虚拟内存
            //虚拟内存
            info[1] = atoi(line + 7);
        }
    }
    fclose(file);
}

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐