You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下获取当前进程虚拟内存大小是否有更优雅的方法?

Linux下获取当前进程虚拟内存大小的更优雅实现

在Linux系统中,确实有比逐行解析/proc/self/status更简洁优雅的方式,以下是几种可行方案:

1. 解析/proc/self/stat文件

/proc/self/stat包含进程核心统计信息,其中第23个字段(从1开始计数)就是虚拟内存大小(vsize),单位为字节。这种方式无需逐行匹配关键字,直接定位字段即可,代码更简洁:

#include <stdio.h>
#include <stdint.h>

uint64_t get_process_vsize() {
    uint64_t vsize = 0;
    FILE* stat_file = fopen("/proc/self/stat", "r");
    if (stat_file) {
        // 跳过前22个字段,读取第23个字段(vsize)
        fscanf(stat_file, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %*u %*u %*d %*d %*d %*d %*d %*d %*u %lu", &vsize);
        fclose(stat_file);
    }
    return vsize;
}

2. 优化版/proc/self/status解析

如果仍倾向于使用/proc/self/status,可以优化解析逻辑,直接匹配VmSize关键字,避免无意义的逐行遍历:

#include <stdio.h>
#include <stdint.h>

uint64_t get_process_vsize_from_status() {
    uint64_t vsize = 0;
    FILE* status_file = fopen("/proc/self/status", "r");
    if (status_file) {
        char line[256];
        while (fgets(line, sizeof(line), status_file)) {
            if (sscanf(line, "VmSize: %lu kB", &vsize) == 1) {
                vsize *= 1024; // 转换为字节
                break;
            }
        }
        fclose(status_file);
    }
    return vsize;
}

补充说明

  • 以上方案均无需依赖第三方库,基于标准C和Linux原生接口实现,轻量且兼容性强,覆盖几乎所有主流Linux发行版。
  • 注意:getrusage系统调用仅能获取驻留集大小(物理内存占用),无法直接获取虚拟内存,若仅需物理内存统计,可使用该系统调用,但不符合虚拟内存的需求场景。

内容的提问来源于stack exchange,提问作者feeling_lonely

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 02:05:59