首页 > 后端开发 > C++ > 如何可靠地获取 Linux 上的 C 运行时内存使用情况?

如何可靠地获取 Linux 上的 C 运行时内存使用情况?

Barbara Streisand
发布: 2024-12-02 16:35:11
原创
293 人浏览过

How to Reliably Get C   Runtime Memory Usage on Linux?

如何使用 C 在运行时获取内存使用信息

简介

监控内存使用情况对于优化程序性能和防止内存泄漏至关重要。在 C 中,获取有关内存消耗的实时信息对于各种调试和优化目的至关重要。

问题陈述

OP 尝试利用 getrusage() 来在程序执行期间检索内存使用统计信息(VIRT 和 RES)但始终遇到零

解决方案

在 Linux 系统上,通过 ioctl() 检索内存使用情况可能具有挑战性。相反,更可靠的方法是从 /proc/pid 中的文件访问信息。以下 C 代码片段演示了如何实现此方法:

#include <unistd.h>
#include <ios>
#include <iostream>
#include <fstream>
#include <string>

void process_mem_usage(double& vm_usage, double& resident_set) {
  using namespace std;
  ifstream stat_stream("/proc/self/stat", ios_base::in);

  // Ignore irrelevant fields
  string pid, comm, state, ppid, pgrp, session, tty_nr, tpgid, flags, minflt, cminflt, majflt, cmajflt;
  string utime, stime, cutime, cstime, priority, nice, O, itrealvalue, starttime;

  // Read desired fields
  unsigned long vsize;
  long rss;

  stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr >> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt
              >> utime >> stime >> cutime >> cstime >> priority >> nice >> O >> itrealvalue >> starttime >> vsize >> rss; // Ignore rest

  stat_stream.close();

  // Convert values to KB
  long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024;
  vm_usage = vsize / 1024.0;
  resident_set = rss * page_size_kb;
}
登录后复制

使用示例

要利用 process_mem_usage() 函数显示内存使用信息,您可以编写一个简单的 main 函数如下:

int main() {
  using std::cout;
  using std::endl;

  double vm, rss;
  process_mem_usage(vm, rss);
  cout << "VM: " << vm << "; RSS: " << rss << endl;
}
登录后复制

通过在程序执行过程中运行此代码,您可以获取运行时的虚拟内存使用量(VM)和驻留集大小(RSS)。

以上是如何可靠地获取 Linux 上的 C 运行时内存使用情况?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板