首頁 > 後端開發 > C++ > 如何可靠地取得 Linux 上的 C 運行時記憶體使用量?

如何可靠地取得 Linux 上的 C 運行時記憶體使用量?

Barbara Streisand
發布: 2024-12-02 16:35:11
原創
361 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板