みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

卒業研究の一環でプログラムを複数作成しました。
研究結果としてプログラムの実行時間、メモリ使用量を出し、比較をしたいと考えています。
ちなみにOSはFreeBSD(もしくはLinux)で、c言語のプログラムです。

プログラムの実行時間はUNIXのtimeコマンドにより導き出すことができますが、プログラムの最大メモリ使用量を導き出す方法はあるのでしょうか?

インターネットなどで調べてみたのですが、それらしいコマンドは見つかりませんでした。
もしあるのであれば教えていただけると幸いです。

投稿日時 - 2008-10-18 16:10:26

QNo.4410865

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

実行中 ps で見るのは?

投稿日時 - 2008-10-19 18:08:19

お礼

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

投稿日時 - 2008-10-19 23:54:13

ANo.1

こんばんは.
Linuxを利用する,と言うことであれば
#include <sys/time.h>
#include <sys/resource.h>
とした上で,getrusage()
という関数を使えば良いと思います.

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

投稿日時 - 2008-10-18 20:01:25

お礼

回答ありがとうございます。

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

どれを見ればよいのやら(汗

投稿日時 - 2008-10-19 22:56:09

あなたにオススメの質問