ホームページ > バックエンド開発 > C++ > Linux で C ランタイムのメモリ使用量を確実に取得する方法は?

Linux で C ランタイムのメモリ使用量を確実に取得する方法は?

Barbara Streisand
リリース: 2024-12-02 16:35:11
オリジナル
288 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート