2010-12-07 2 views
1

私はそれがcrossplatfomの方法を必要とするか、ブーストを使用しているかもしれません。だからあなたのアプリがどれだけのRAMを食べるかに関する情報を得る方法は?あなたのアプリはどれくらいのRAMを食べているのですか?

+0

他のプロセスの実行状況によって大きく変わる無意味な値です。仮想メモリのサイズだけが何かを言うことができます。 –

+2

「XはどのくらいのRAMを使用しますか」という質問は答えがありません。プロセスはメモリ(DLLなど)を共有したり、メモリをスワップアウトしたり、プロセス内でメモリを割り当てたり、実際にRAMやスワップなどを使用したりすることはできません。 – Thanatos

+0

[実行時のメモリ使用量をC++で取得する方法](http://stackoverflow.com/questions/669438/how-to-get-memory-usage-at-run-time-in-c) –

答えて

2

Windowsの場合、タスクマネージャを使用します。 Linuxの場合はtopを使用してください。あなたは、あなたのアプリケーション内で推測しようとするのではなく、OSにあなたのことを伝えるほうがずっと良いです。

+1

または余分な "htop"の場合:http://htop.sourceforge.net/ – Thanatos

1

Visual Studioを使用しているWindowsでは、CRT Debug Heap機能を使用できます。有用な統計情報を印刷するには_CrtMemDumpStatisticsを使用することができます。 _CrtMemDumpAllObjectsSinceは、チェックポイント間に割り当てられたすべてのオブジェクトをリストします。メモリリーク検出(_CrtDumpMemoryLeaks)のようなより有用なものがあります。 _CrtMemCheckpointでスナップショットを撮り、後で_CrtMemDifferenceとの違いを比較することもできます。

newを再定義して、CRTデバッグ機能の詳細情報を取得することもできます。

#ifdef _DEBUG 
#define new new(_CLIENT_BLOCK, __FILE__, __LINE__) 
#endif 

注:は、これはCRTの割り当てを追跡します。プロセスのメモリ情報全体を取得するには、GetProcessMemoryInfoを使用します。

+0

#define new(_CLIENT_BLOCK、__FILE__、__LINE__) は未定義の動作です。 予約語の再定義は、C++標準によって明示的に禁止されています。 –

+0

@Gene Bushuyev:まあ、これはマイクロソフトの提案です。コード内のすべての 'new'にこれらのパラメータを手動で追加することも可能ですが、それはかなり苦しいでしょう。ルールは時折曲がると思う。これは結局のところデバッグテスト版です。それを解放する必要はありません。 – detunized

+0

移植性がありません。これは、ISOだけでなく、MSDNによって完全に定義されています。しかし、そのマクロとして定義されていることをすべて理解してください。例えば、あなたのクラスで 'operator new'を宣言しようとすると、それは影響を受けます。 – MSalters

0

私は、メモリリークを検出するための非常に便利な、私のアプリケーションの全体的なパフォーマンスをテストするためにhttp://valgrind.org/を使用したいです! LinuxのTOPコマンドとWindowのタスクマネージャの両方の簡単なランタイム情報を探しているなら、非常に使いやすいです。

関連する問題