2011-07-14 12 views
4

これはおそらく簡単な質問ですが、私は答えを見つけることができませんでした。 mallocはrealloc内とcalloc内で内部的に呼び出されていますか?私は何とかmalloc呼び出しを数えているので、それは私のために面白いです。ありがとうreallocとcallocはmallocを呼び出しますか?

+5

あなたはコンパイラの実装を見なければなりません。 –

+0

CまたはC++でコンパイルしていますか? – Puppy

+0

g ++だから私はC++だと思います – yui

答えて

1

reallocとcallocを呼び出し、callgrind(Valgrindのツールの1つ)に送る簡単なテストプログラムを書くことができます。コールグラフが表示されるので、libcの実装でmallocとcallocがどの関数を呼び出すかを調べることができます。

6

システム、ライブラリ、またはコンパイラに依存するメカニズムに依存しないでください。 reallocがあるシステム/コンパイラ/ライブラリでmallocを呼び出すことがわかっていても、他のシステムで同じように処理されることは確かではありません。

この時点での質問は、あなたが達成しようとしているものです。メモリの使用状況を追跡する必要がある場合は、C++でより良い方法があります。たとえば、new演算子とdelete演算子をグローバルに置き換えるなどです。 Linuxのいくつかのバージョンでは、mallocにフックを追加することもできます(ただし、この機能は使用されません)。他のシステムでは、他のメカニズムを使用して、より安全なものを実現することができます。

+0

実際には、私はmallocなどの動的メモリ使用量を追跡するためのフックを実装しています。あなたはそれを行うためのより良い方法を知っていますか? – yui

+0

、reallocがmallocを呼び出しても、私のプログラムでこれを考慮する必要があります。 – yui

+4

ダイナミックメモリの使用状況を追跡する独自のツールを作成しないでください。既に書かれテストされているツールを使用してください。 –

0

言語の基準からわかりません。 C99は、お互いを呼び出す機能については何も言わないし、そうでない。

C++では、mallocnewにコールすることはできませんが、どちらの機能にもこのような制限はありません。

2

Linuxで作業しているのでおそらくglibcを使用しています。 glibc malloc source codeを見ると、callocのような関数から__malloc_hookというものが呼び出されていることがわかります。割り当てを傍受してカウントするのはdocumented feature you can useです。他の有用な統計情報はmallinfoから得ることができます。しかし、あなたが最初に望むものを実現する既存のツールがあるかどうかを確認してください。メモリ管理のデバッグと統計は共通の要件です。

関連する問題