Linuxで「C」プログラムが消費するメモリを計算する方法

Linuxで「C」プログラムが消費するメモリを計算する方法

私は2つのCプログラムを書いた

  1. 一つは関数ポインタを使うことであり、
  2. もう一つは関数ポインタを持っていません。

今、これら2つのプログラムが消費するメモリを知り、メモリを最適化する方法を知りたいです。

答え1

後で使用されるメモリにのみ興味がある場合は、GNUを使用してくださいtime

command time -v myprogram

(上記では、組み込みコマンドではなくbash外部コマンドを呼び出す方法を使用しているため、シェルが異なる場合があります。)timebash

またはGNU memusage

memusage -T ./myprogram

継続的に使用されているメモリ(長期実行プロセスなど)に興味がある場合は、他の答えの1つがより良い可能性があります。この関連質問も参照してください。メモリ使用量コマンド、構文はtimeコマンドと似ています。

答え2

必要な統計の種類によって異なりますが、Linuxで実行するためにCでプログラムを書く場合は、確かに知っておくと良いでしょう。ウォールグリーン

Valgrindは、プログラムの詳細なメモリ使用量を分析するだけでなく、Cで一般的に発生し、デバッグするのが難しいメモリアクセス違反も検出できます。

分析のために、特定の分析ツールのドキュメントを確認してください。特にメモリチェックそして構成

答え3

以下は、システム内のすべてのsshdプロセスの常駐セットサイズと仮想メモリサイズです。

ulric@qvp2:~$ ps -eo rss,vsz,args|grep sshd|grep -v grep
  448  55292 /usr/sbin/sshd -D
 5176 147460 sshd: ulric [priv]
 2776 149704 sshd: ulric@pts/3

それとも簡単です。

ulric@qvp2:~$ ps aux|head -n 1&&ps aux|grep sshd|grep -v grep
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     13221  0.0  0.0  55292   448 ?        Ss   Apr21   0:01 /usr/sbin/sshd -D
root     16046  0.0  0.5 147460  5176 ?        Ss   08:12   0:00 sshd: ulric [priv]
ulric    16187  0.0  0.2 149704  2776 ?        S    08:12   0:00 sshd: ulric@pts/3

その他のオプションについては、psのマンページをご覧ください。

答え4

最も簡単な方法は、ヒープポインタをキャプチャすることです。sbrk(0)、これを64ビット符号なし整数に変換し、メモリを割り当てて差を計算します。

関連情報