これはおそらく簡単な質問ですが、私は答えを見つけることができませんでした。 mallocはrealloc内とcalloc内で内部的に呼び出されていますか?私は何とかmalloc呼び出しを数えているので、それは私のために面白いです。ありがとうreallocとcallocはmallocを呼び出しますか?
答えて
reallocとcallocを呼び出し、callgrind(Valgrindのツールの1つ)に送る簡単なテストプログラムを書くことができます。コールグラフが表示されるので、libcの実装でmallocとcallocがどの関数を呼び出すかを調べることができます。
システム、ライブラリ、またはコンパイラに依存するメカニズムに依存しないでください。 reallocがあるシステム/コンパイラ/ライブラリでmallocを呼び出すことがわかっていても、他のシステムで同じように処理されることは確かではありません。
この時点での質問は、あなたが達成しようとしているものです。メモリの使用状況を追跡する必要がある場合は、C++でより良い方法があります。たとえば、new演算子とdelete演算子をグローバルに置き換えるなどです。 Linuxのいくつかのバージョンでは、mallocにフックを追加することもできます(ただし、この機能は使用されません)。他のシステムでは、他のメカニズムを使用して、より安全なものを実現することができます。
言語の基準からわかりません。 C99は、お互いを呼び出す機能については何も言わないし、そうでない。
C++では、malloc
はnew
にコールすることはできませんが、どちらの機能にもこのような制限はありません。
Linuxで作業しているのでおそらくglibcを使用しています。 glibc malloc source codeを見ると、callocのような関数から__malloc_hookというものが呼び出されていることがわかります。割り当てを傍受してカウントするのはdocumented feature you can useです。他の有用な統計情報はmallinfoから得ることができます。しかし、あなたが最初に望むものを実現する既存のツールがあるかどうかを確認してください。メモリ管理のデバッグと統計は共通の要件です。
- 1. 2次元ポインタ構造体をmalloc、calloc、reallocする方法は?
- 2. はmallocとreallocの
- 3. mallocを呼び出すsnprintf、またはmallocを呼び出さないsnprintf
- 4. のcallocの呼び出しが失敗し、以下のコードは、呼び出し)
- 5. mallocとreallocの機能
- 6. realloc()を何度か呼び出すとCプログラムがクラッシュする
- 7. c struct、malloc、realloc issue
- 8. calloc/mallocと奇妙な動作を読んでいますか?
- 9. C++の "new"と "malloc"と "calloc"の違いは何ですか?
- 10. mallocとreallocでエラーを取得する
- 11. のrealloc():reallocの無効次のサイズとのmalloc():高速なmallocのメモリ破損
- 12. mallocを複数回呼び出す
- 13. malloc呼び出しの最大ポインタ値はどれですか
- 14. 再帰呼び出しでreallocを使用する
- 15. mallocはシステムコールを呼び出さないのですか?
- 16. calloc、malloc、および動的構造体割り当て
- 17. mallocが失敗したときにcallocが成功を返します
- 18. posix_memalign、malloc、callocにはlliインタプリタで問題があります
- 19. initWithBitmapDataを呼び出すとMallocポインタが解放されませんでした
- 20. realloc()は最初の呼び出しの後に割り当てません
- 21. ここで私のmalloc/reallocに問題がありますか?
- 22. Calloc/Mallocと頻繁にまたはあまりにも多くのスペースを解放しますか?
- 23. malloc/realloc /空き容量の最適化
- 24. 新規またはMalloc/Calloc/etcを使用しないC++の初期化
- 25. LD_PRELOADでmallocへの再帰呼び出しを修正しました
- 26. NETBSD 3.1エラー - malloc():警告:再帰呼び出し
- 27. サービスインタフェースでGetTypeを呼び出すと、呼び出しが発生しますか?
- 28. callocを繰り返し呼び出すと、以前の呼び出しのデータが破損しているようです
- 29. defrecordコンストラクタで呼び出しを呼び出しますか?
- 30. 繰り返し呼び出しの後でrealloc()が失敗する
あなたはコンパイラの実装を見なければなりません。 –
CまたはC++でコンパイルしていますか? – Puppy
g ++だから私はC++だと思います – yui