C++ Linux macOS

実行中のプロセス内で自分のメモリ使用量を調べる

投稿日:

実行中のプロセス内で、自分のメモリ使用量を取得する方法。
Linux, macOS についてそれぞれ。

 

Linux

Linux でよくやられるのは /proc 以下を見にいく方法でしょうか。
/proc/[pid]/status, /proc/[pid]/statm から取得できます。
[pid] は process ID で getpid()[unistd.h] で取得できます。
前者は人間が読みやすい形式ですが、プログラムで読むなら後者がラクだと思います。
 

/proc/[pid]/status

  • VmPeak : 仮想メモリサイズのピーク値
  • VmSize : 現在の仮想メモリサイズ
  • VmHWM : 実メモリ使用量のピーク値(High Water Mark)
  • VmRSS : 現在の実メモリ使用量(Resident Set Size)
     

/proc/[pid]/statm

7つの数字が列挙されていて、そのうち前から3つが
仮想メモリ、実メモリ、共有メモリ使用量。
単位がページ数なので getpagesize()[unistd.h] を掛ければ byte単位になる。

Google Adsense



macOS

さて、ここからがこの記事のきっかけ。
元は上記のように /proc 以下を見に行っていた Linux用のコードを
macOS に移植しようとしたら /proc なんて無かった。。。という訳で調べてみた。

構造体 task_basic_info が virtual_size, resident_size (unit: byte) を持っていて、
他にも user_time や system_time なんかも持っているので、
例えば以下のような感じに task_info(...) 関数で task_basic_info を詰めてもらう。

macOS でどうやって共有メモリサイズを取得できるのかは良く分からなかった。。。
 

Google Adsense

Google Adsense

-C++, Linux, macOS
-, ,

Copyright© HEPtech, 2024 All Rights Reserved.