valgrindを使用して、自分のプログラムがクラスの必要なメモリ範囲内にあることを確認しています。私がマジフを実行すると、私の最大メモリ使用量(ヒープ+スタック)が21 KBであるというきれいなチャートが得られます。私がvalgrindのmemcheckを実行すると、185931バイトが割り当てられていることがわかります。何を報告しているの違いは何ですか?重要なのは、コードに2つの文字列を刻むステップがあるので、最初のものをreallocでサイズ変更し、2つの文字列をstrcatし、次に2つ目の文字列を解放します。massifのメモリ数とmemcheckのメモリ数の違いは何ですか?
2
A
答えて
5
Memcheckはメモリリークを探すことを目的としているため、すべてのメモリ割り当ての合計(およびすべての解放の合計)をカウントします。
Massifは、プログラムのメモリフットプリントを調べることを目的としているため、プログラムの各ポイントで使用されている合計メモリをカウントします。言い換えれば
、あなたのプログラムは次のように見える場合:
--------------------------------------------------------------------------------
n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B)
--------------------------------------------------------------------------------
0 0 0 0 0 0
1 130,386 10,248 10,240 8 0
2 131,436 10,248 10,240 8 0
99.92% (10,240B) (heap allocation functions) malloc/new/new[], --alloc-fns, etc.
->99.92% (10,240B) 0x8048407: main (in /home/kevin/miscdev/so/x)
:山塊はあなたにこのことを教えてくれるのに対し
total heap usage: 2 allocs, 2 frees, 20,480 bytes allocated
:
int main(void)
{
free(malloc(10*1024));
free(malloc(10*1024));
return 0;
}
その後Memcheckはあなたにこのことを教えてくれます(プログラムの存続期間中、20480バイトが割り当てられましたが、ピーク使用量は10240バイトのみでした)。
+0
将来の視聴者のために、memcheckは、reallocの実装とは無関係に、reallocをfreeとmallocのalloc/free countまでカウントします。 (私はそれがreallocへの呼び出しをキャプチャし、カウントを増やしてから "本当の" reallocを呼び出すと思うが、100%確実ではない。) – AVB
関連する問題
- 1. node.jsバッファとWebAssemblyメモリの違いは何ですか?
- 2. メモリ対変数値のデータベースの違い
- 3. Pythonでのメモリ使用量:memory_profilerとguppyの違いは何ですか?
- 4. GPUでの共有メモリとL1キャッシュの違いは何ですか?
- 5. massifでテスト中のプログラムがより多くのメモリを使用しますか?
- 6. 定数メモリとグローバルメモリを使用するプログラムの違い
- 7. C#7.2のスパン<T>とメモリ<T>の違いは何ですか?
- 8. Javaで使用されるピークと最大メモリの違いは何ですか?
- 9. 新規とアロケータによるメモリ割り当ての違いは何ですか
- 10. メモリを食べるメモリとは何ですか
- 11. 複数のスレッドとメモリ
- 12. 連続したメモリと連続したメモリの違い
- 13. メモリの長さ以外のデータ型の違いは何ですか?
- 14. パフォーマンスとメモリの違いchdirとcd
- 15. ELFとメモリのセグメントの違い
- 16. theano CPUのメモリ不足:何が間違っていますか?
- 17. 整数+1とメモリ
- 18. 「タグ付きメモリ」とは何ですか?
- 19. 「メモリ・ストンプ」とは何ですか?
- 20. 「メモリ履歴」コマンドとは何ですか?
- 21. javascriptのvar関数と関数の違いは何ですか?
- 22. これら2つのメモリ割り当ての違いは何ですか?
- 23. 共有メモリのオーバーレイは何ですか?
- 24. cudaの共有メモリと管理対象メモリの変数
- 25. キャッシュメモリと密結合メモリの違い
- 26. I/OポートとI/Oメモリの違い
- 27. データ型変数と変数V2の違いは何ですか?
- 28. Seq関数とofList関数の違いは何ですか?
- 29. 関数と*関数の違いは何ですか?
- 30. MPI_ *関数とPMPI_ *関数の違いは何ですか?
私はmemcheckが割り当ての総量を数えると思います。メモリを解放して新しいメモリを割り当てた場合、メモリチェックでカウントされますが、大まかには、ある瞬間に必要だった実際の物理量だけを測定します(ただし、これについてはわかりません)。 –