2012-01-31 22 views
1

プログラミングの競争によっては、問題にメモリ制限(64MBや256MBなど)があります。私のプログラム(C++で書かれたもの)がbashコマンドで使用するメモリをどのように理解できますか?プログラムによって使用されるメモリを制限する方法はありますか?制限よりも多くのメモリを使用する場合、プログラムは終了する必要があります。bashでプログラムが使用するメモリの理解(ubuntu linuxで)

+1

mmap(2)システムコール(など)によってexecve(2)によって初期化され、変更されました。 AskUbuntuは、基本的なシェル機能(リソース制限など)やモニタリング( 'ps'はそれに対応し、' top')のためのより良い場所を見つけるかもしれません – derobert

答えて

4

実行中のプロセスと現在のメモリとスワップの一覧が表示されます。また、GUIを使用する場合は、システムモニタアプリケーションを使用できます。

メモリ使用量をロックする場合、常にulimit -vを使用して、プロセスの最大仮想アドレス範囲を設定できます。これにより、mallocとその仲間は、設定された制限よりも多くのメモリを取得しようとすると失敗します。

+0

プログラムは1秒未満で実行されます、私のプログラムを監視するトップ 'コマンド? 'top'の出力に、私のプログラムで使用されているメモリを示す列はありますか? 'ulimit -v'は私のプログラムで使用されているメモリを制限していますか?(仮想メモリの意味は?) – Farzam

+1

あなたのプロセスがtopよりも速いなら、それは最善ではないでしょう。 Valgrind --tool = massif(あなたのコマンド)を試すことができます。仮想アドレス空間は、実行するプログラムによって要求されたすべてのメモリです。オペレーティングシステムはメモリを提供する役割を担っているため、ラム内の特定の場所に実際にマップする必要はありません。たとえば、dimmの先頭に20kb、途中に20kbがあるかもしれませんが、OSはそれを素敵な塊のように見せます。 – RussS

+0

'valgrind --tool = massif MY_COMMAND'は何を出力するのですか?それは== 4587 ==をプリントします。どういう意味ですか? – Farzam

1

あなたはそれに入れたい仕事に応じて、getrusage(),getrlimit()、およびsetrlimit()を見ることができます。テスト目的のために、あなたはプログラムの初めにそれらを呼び出すか、あるいは親プロセスでそれらを設定し、子供としてコンテストプログラムをフォークすることができます。コンテストの検討のためにプログラムを提出する際に、それらを省略してください。

1

また、プロセス1234のために、あなたは/proc/1234/maps/proc/1234/smapsに見たりpmap 1234を実行することができ、これらすべてのコマンドは、PID 1234

のそのプロセスのメモリマップを表示する例を取得するためにcat /proc/self/mapsを実行してみます(メモリそのcatコマンドを実行しているプロセスのマップ)。

プロセスのメモリマップは、私は `ヘルプulimit`を示唆

関連する問題