2011-06-20 14 views
0

のメモリ使用量を追跡するために、malloc関数のオーバーロード:
Best strategy for profiling memory usage of my code (open source) and 3rd party code(closed source)可能性の重複サードパーティのライブラリ

私は図書館を持つことにより、自分のコードでのmallocのを追跡するために、メモリトラッキングツールを実装することを考えていますコンパイル時にリンクしてmallocをマクロでオーバーライドし、いくつかのものをログに出力する追加のデバッグ情報を追加します。おそらく私がソースコードを持っていないサードパーティのライブラリや、おそらくデバッグライブラリを利用してこれを行うことは可能でしょうか?私はサードパーティ製のライブラリについて話しているように、ライブラリ内でリンクできますか?それは私のライブラリで定義されたメソッド(またはマクロ)を使用しますか?

おかげ

+0

使用valgrindの、自分自身の面倒を保存おそらくあなたの最も安全な賭けではありません。あなたの好きな検索エンジンで検索してください。さらに、このサイトには、この非常にトピックに関するたくさんの質問があります。 – Nim

+0

...例えば、ここにdup:http://stackoverflow.com/questions/910172/track-c-memory-allocations – Nim

+0

...誰かが 'sbrk()'を呼び出してメモリを割り当てるまで: –

答えて

0

使用プロファイラ:AQTime Visual Studioのために本当に良いものです。

1

私はあなたがそうすることはできないと思いますが、mallocはシステムコールです。

バイナリライブラリは実際にはmalloc()を呼び出さず、マシンに保存されたライブラリをメモリにロードしています。次に、正しいメモリアドレスで関数を実行します。

malloc()を再定義すると、混乱すること以外は何もしません。

+0

Hmm 、 'malloc(3)'はシステムコールではなく、ライブラリルーチンです。あなたはおそらく 'brk(2)'や 'mmap(2)'を考えています.UNIX libcがメモリ管理に依存しているシステムコールです。どちらのWindowsでもシステムコールではありません。 –

+0

私は訂正した。 – Aatch

0

それはあなたが上であることやろうとしているものプラットフォーム/ OSに依存します:あなたは組み込みデバイス上でRTOSを使用している場合

  • 、あなたもそこに直接コードを変更することができるかもしれ...
  • Linuxを使用している場合は、コードをどこかに見つけてそこで変更して再コンパイルすることができますが、ご使用のプラットフォームにパフォーマンスに重大な影響を与える可能性があります。
  • 他の場合は、アプリケーションでラッパーを使用したり、そのようなものを「os_malloc」などと呼び、デバッグなどのためにその関数を実装できます。

最後のものは、どんな...