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