linux物理内存,虚拟内存的获取

使用文件流的方式,解析   cat /proc/meminfo 文件里面的数据

 

复制代码
#include <iostream>  
#include <fstream>  
#include <sstream>  
#include <string>  
#include <unordered_map>  
#include <map>

struct BASE_INFO_S{
    unsigned long long MemTotalMb; //总的物理内存
    unsigned long long MemUsedMb;  //已使用的物理内存

    unsigned long long SwapTotalMb;//总的虚拟内存
    unsigned long long SwapUsedMb;//已使用的虚拟内存


};

// cat /proc/meminfo
std::map<std::string, std::string> parseMeminfo() {  
    //std::unordered_map<std::string, std::string> meminfo;  
    std::map<std::string, std::string> meminfo;  
    std::ifstream file("/proc/meminfo");  
    std::string line;  
  
    if (file.is_open()) {  
        while (std::getline(file, line)) {  
            std::istringstream iss(line);  
            std::string key, value;  
            if (!(iss >> key >> value)) continue;  
            meminfo[key] = value;  
        }  
        file.close();  
    } else {  
        std::cerr << "Error: Could not open /proc/meminfo" << std::endl;  
    }  

    std::cout<<"========================================================="<<std::endl;
    for(auto it = meminfo.begin(); it != meminfo.end(); ++it){
        std::cout << it->first << ": " << it->second << std::endl;
    }
    std::cout<<"========================================================="<<std::endl;

    BASE_INFO_S baseInfo={0};
    baseInfo.MemTotalMb = std::stoll(meminfo["MemTotal:"]) / 1;
    baseInfo.MemUsedMb = (std::stoll(meminfo["MemTotal:"]) - std::stoll(meminfo["MemFree:"]) - std::stoll(meminfo["Buffers:"]) - std::stoll(meminfo["Cached:"])) / 1;

    baseInfo.SwapTotalMb = std::stoll(meminfo["SwapTotal:"]) / 1;
    baseInfo.SwapUsedMb = (std::stoll(meminfo["SwapTotal:"]) - std::stoll(meminfo["SwapFree:"])) / 1;

    std::cout<<"MemTotalMb:"<<baseInfo.MemTotalMb<<std::endl;
    std::cout<<"MemUsedMb:"<<baseInfo.MemUsedMb<<std::endl;
    std::cout<<"SwapTotalMb:"<<baseInfo.SwapTotalMb<<std::endl;
    std::cout<<"SwapUsedMb:"<<baseInfo.SwapUsedMb<<std::endl;
    return meminfo;  
}  
  
int main() {  
    auto meminfo = parseMeminfo();  
    return 0;  
}
复制代码

 

posted @   He_LiangLiang  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2023-03-31 clickhouse创建2个表
点击右上角即可分享
微信分享提示