ホームページ >バックエンド開発 >C++ >Linux 上で C プログラムのランタイム メモリ使用量を正確に取得するにはどうすればよいですか?

Linux 上で C プログラムのランタイム メモリ使用量を正確に取得するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-11 09:34:14169ブラウズ

How Can I Accurately Retrieve a C   Program's Runtime Memory Usage on Linux?

/proc/pid を使用した C での実行時のメモリ使用量の取得

C では、実行時のプログラムのメモリ使用量に関する情報を取得するのが困難な場合があります。 getrusage() を使用しようとしたにもかかわらず、投稿者は常にゼロ値に遭遇しました。 /proc/pid ディレクトリ内のファイルをクエリするという代替アプローチも存在します。

Linux システムでは、/proc/pid にはメモリ使用量などのプロセス固有の情報が含まれています。この目的で最も信頼できるファイルの 1 つは /proc/self/stat です。このファイルを解析すると、次のフィールドを抽出できます。

  • vsize: プログラムの仮想メモリ サイズ (KB)
  • rss: プログラムの常駐セット サイズ (KB 単位)現在使用されているメモリ)

これらの値を取得するには、 process_mem_usage() 関数:

void process_mem_usage(double& vm_usage, double& resident_set)
{
    // Parse /proc/self/stat
    ifstream stat_stream("/proc/self/stat");
    stat_stream >> ... >> vsize >> rss;
    stat_stream.close();

    // Convert to KB
    long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024;
    vm_usage     = vsize / 1024.0;
    resident_set = rss * page_size_kb;
}

main() 関数内で、 process_mem_usage() を使用して仮想メモリの使用量と常駐セットのサイズを出力できます:

int main()
{
    double vm, rss;
    process_mem_usage(vm, rss);
    cout << "VM: " << vm << "; RSS: " << rss << endl;
}

このアプローチを使用しますを使用すると、実行時に現在のプログラムのメモリ使用量情報を正確に取得できます。

以上がLinux 上で C プログラムのランタイム メモリ使用量を正確に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。