2012-02-10 11 views
2

ほとんどのメモリを使用しているライブラリを探したい。私は私のアプリケーションで一種のメモリ・ロガーを作っていきたいです。これは、独自のプロセスでどのライブラリがどの程度のメモリを使用しているかをプログラムで調べる必要があります。ダイナミックリンクライブラリで使用されているメモリの量を確認したい

たとえば、私は10MBのメモリを使用しているプログラムがあります。そこには9MBのメモリを使用している.dllがあります。私はすべてのdllとそれらが使用するメモリの数を見たいと思います。 このアプリケーションはWindows上で動作します。プログラムですべてを実行する必要があります。

+0

DLL自体、またはDLLが割り当てているすべての動的メモリを含んでいますか? –

+1

に割り当てられたすべての動的メモリが含まれています – Laurence

+0

自分でコード化する理由がない限り、少なくともヒーププロファイラーをhttps://code.google.com/p/gperftools/wiki/GooglePerformanceToolsで調べる必要があります。それはあなたがUNIX側で何をしたいのかとほとんど同じですが、私のテストではWindowsのサポートもあります。それ以外の場合は、いくつかのアイデアを得るのは良い出発点です。 –

答えて

2

最も簡単なアプローチであるかどうかは不明ですが、各ライブラリをロードした直後にメモリ割り当てWinAPI関数をフックする必要があります。 あなたのフックであなたは必要なカウントを行うことができます 良いフックフレームワーク(http://research.microsoft.com/en-us/projects/detours/)としてMicrosoft Detoursライブラリを見てください。一般的には無料ではありませんが、研究用、非商用、および非運用用として無料で利用できます。

実際にフックする実際の機能は、追跡する必要があるdllによって異なります。

すべてが動的にリンクされたMSVCランタイムでコンパイルされている場合、malloc()/ free()/ calloc()/ realloc()一連の関数をフックする必要があります。 実行時に静的にリンクされていた場合や、MS VCでコンパイルされていない場合は、HeapAlloc/HeapCreate/HeapDestroy/HeapFree/heapReAlloc/VirtualAlloc/VirtualFreeなどのメモリ関連のWinAPI呼び出しをフックする必要がありますmsvcr100.dllがkernel32.dllからインポートする)関連する関数

+0

私は何かを引く方法を知っています、私は前にそれをしました。しかし、私は必要な機能をどのように見つけることができますか?どのような関数がDLLとそのメモリを扱うのですか? – Laurence

+0

私の回答を編集し、そこに詳細を追加しました –

関連する問題