2009-06-26 8 views
2

雇用者インタビュー中に、利用可能なRAMの量を測定するプログラムを作成するよう、mineの友人に頼まれました。予想される答えは、バイナリ検索の方法でmalloc()を使用していました。失敗メッセージを取得し、部分サイズを小さくし、割り当てられたメモリの量を合計するまで、メモリの大部分と大部分を割り当てました。実行中のプログラム内で使用可能なRAMの量を確認する

この方法では、物理メモリではなく仮想メモリの量が測定されます。しかし、私はこの問題について興味がある。

exec(dmesg |grep -i memory)を使用せずに、プログラム内から利用可能なRAMの量を知る方法はありますか?

+1

毎日のFTWのインタビュー記事のように聞こえます。 – akarnokd

+0

インタビュアーのメモリ管理全般、仮想メモリなどの知識をテストするための質問のように聞こえます。 – sharptooth

+0

しかし、いいです。これは、OSとメモリ管理の知識と創造性の両方をテストします。 1つは、メモリ管理について何も知らなくても解決策を考え出すことができます。 –

答えて

5

正しいですか:malloc()は、物理メモリまたは仮想メモリを区別しません。実際、それは仮想メモリの全体のポイントです。そのような詳細をプログラムと無関係にすることです。

あなたは知ることができますが、OS固有です。たとえば、Linuxです。

+0

ありがとうございます。 procfsにはいくつかの良い情報があります - OSに依存しますが、非常に便利です。 –

3

これを実行する唯一の方法は、OS固有の機能を使用することです。 malloc()を使用して、いくつかの理由で役に立たないです:

  • それはOSが良く、多くの場合、劣化し、物理的に利用可能であるよりもはるかに多くのメモリを割り当てるメモリ割り当て
  • 上のプロセスごとのキャップを有していてもよく
  • 仮想メモリを測定しますプラットフォーム内での安定性は、おそらくうまくいかないでしょうか?
1

これはOS固有のもので、独自のメモリを作りたい場合を除いてOSサービスからこのような情報を収集するべきです管理層

+0

私はそれを真剣に疑っています。 –

0

OSに特化していますが、Linuxではシステムメモリに関する情報は/ proc/meminfoにあります。おそらくsysctlインタフェース(http://www.linuxjournal.com/article/2365)を使用して、このデータをCプログラムで取得することもできます。

1

malloc()を使用すると、1つのプロセスに割り当てることができるメモリ量だけが表示されます。これが仮想メモリの総量よりも低い理由があります。たとえば、OSのクォータやプロセスごとの32ビット制限のアドレススペースがあるとします。

(もちろん、仮想メモリ> = RAM)