c++跨平台获取物理内存占用峰值需分windows和linux实现:windows调用getprocessmemoryinfo读取peakworkingsetsize(字节),linux解析/proc/self/status中vmhwm字段(kb转字节),统一返回字节数。

在C++程序中精确获取当前系统物理内存占用峰值,需调用Windows平台原生API(如GetProcessMemoryInfo)并结合PSAPI库解析工作集峰值数据,Linux平台则需读取/proc/self/status中的VmHWM字段,二者路径不同且返回单位不一致,直接混用会导致数值偏差超30%。
Windows平台:通过GetProcessMemoryInfo获取峰值工作集大小
第一步:在项目属性→链接器→输入→附加依赖项中添加 【psapi.lib】,否则链接时会报LNK2019错误。
第二步:包含头文件 #include
第三步:声明PROCESS_MEMORY_COUNTERS结构体变量,调用GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc))获取当前进程内存信息;其中pmc.PeakWorkingSetSize字段即为自进程启动以来的物理内存占用峰值(单位:字节)。
Linux平台:解析/proc/self/status提取VmHWM值
方法一:使用标准C文件I/O逐行读取
打开/proc/self/status文件,用fgets逐行扫描,匹配以"VmHWM:"开头的行;该行末尾数字为峰值驻留集大小,单位是kB,需乘以1024转为字节。
方法二:用shell命令快速验证(开发调试阶段)
执行 cat /proc/self/status | grep VmHWM,确认输出形如“VmHWM: 125672 kB”,说明内核已启用该统计项;若无输出,则当前内核可能禁用了taskstats或CONFIG_TASKSTATS未开启。
跨平台封装:统一返回字节数的C++函数
定义函数 uint64_t GetPeakPhysicalMemoryUsage(),内部用#ifdef _WIN32区分编译路径:Windows分支走GetProcessMemoryInfo流程;Linux分支用std::ifstream打开/proc/self/status,调用std::string::find("VmHWM:")定位行首,再用std::stoi解析后续数字。
注意:Linux下/proc/self/status是实时虚拟文件,读取过程不会阻塞,但若在多线程环境中频繁调用,建议加std::atomic_flag控制最小调用间隔(如≥10ms),避免I/O抖动影响性能。
返回值直接为字节数,无需二次换算;该值在进程生命周期内单调递增,重启后归零。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











