• 締切済み

UNIXで自作プログラムのメモリ使用量を調べ方がわかりません

卒業研究の一環でプログラムを複数作成しました。 研究結果としてプログラムの実行時間、メモリ使用量を出し、比較をしたいと考えています。 ちなみにOSはFreeBSD(もしくはLinux)で、c言語のプログラムです。 プログラムの実行時間はUNIXのtimeコマンドにより導き出すことができますが、プログラムの最大メモリ使用量を導き出す方法はあるのでしょうか? インターネットなどで調べてみたのですが、それらしいコマンドは見つかりませんでした。 もしあるのであれば教えていただけると幸いです。

みんなの回答

  • eroermine
  • ベストアンサー率18% (83/444)
回答No.2

実行中 ps で見るのは?

kakinokane
質問者

お礼

回答ありがとうございます。 psコマンドですか…。 そのためにはプログラムを一旦停止する必要があったのでまだ試していませんでした。 mallocで動的にメモリを確保していたので、最大使用量を調べるためには最大になるであろう所にscanfなんかを入れてpsコマンドで調べるしかないですかね? ほんとは自動で最大メモリ使用量を調べたかったのですが、この方法でやってみようかと思います。

回答No.1

こんばんは. Linuxを利用する,と言うことであれば #include <sys/time.h> #include <sys/resource.h> とした上で,getrusage() という関数を使えば良いと思います. また,同じ関数をプログラムの最初と最後で利用することで, 実行時間を計ることもできます. 詳しくはコマンドプロンプトで man getrusage としてください. timeコマンドを使ってはいけないのは,一般のマルチタスクOSでは, 負荷の状態によってプログラムが終了するまでの時間にばらつきが生じるためです. getrusageは「そのプログラムが使ったユーザー時間」を計れますので, timeコマンドより精度が良いです.

kakinokane
質問者

お礼

回答ありがとうございます。 getrusageがあったとは初めて知りました。 manで調べてみたのですが、う~ん…難しいですね(泣 まだメモリ使用量の出し方が理解できません。 いくつかのプログラムに記述してprintfしてみましたが、すべて同じ値を返されてしまいました。 ↓ ru_ixrss = 1663872 ru_idrss = 1666208 ru_ru_isrss = 1665344 ru_ru_minflt = 1207648 ru_ru_majflt = 1656240 ru_ru_nswap = 0 ru_ru_inblock = 0 ru_ru_oublock = 895 ru_ru_msgsnd = 64 ru_ru_msgrcv = 34 ru_ru_nsignals = 0 ru_ru_nvcsw = 0 ru_ru_nivcsw = 0 どれを見ればよいのやら(汗

関連するQ&A

専門家に質問してみよう