tcmalloc を使用してアプリケーションをコンパイルし、HEAPPROFILE 環境変数を使用してヒープ ファイルを取得しました。
約 10MB ごとに新しいヒープ ファイルが作成され、tcmalloc ページによると、pprof ツールを使用してヒープ ファイルを比較し、追加の解放されていないオブジェクト (リークの可能性) を確認できます。
pprof --text myapp --base=myapp.0001.heap myapp.0047.heap
結果: ... 合計: 4600.7 MB
4592.3 99.8% 99.8% 4592.3 99.8% 0x00000000009f1d25
7.3 0.2% 100.0% 7.3 0.2% 0x00000000009f1cfc
1.0 0.0% 100.0% 1.0 0.0% 0x00000000009f74f1
0.0 0.0% 100.0% 4600.7 100.0% 00007f07fe149b44
0.0 0.0% 100.0% 4600.7 100.0% 0x0000000000480da1
0.0 0.0% 100.0% 4600.7 100.0% 0x00000000004b5a3e
0x00000000009f1d25 は適切なアドレスですが、このデータをどうすることもできません。
helloworld アプリケーションで同じことを実行しようとしました
pprof --text helloworld helloworld.0001.heap
Using local file helloworld.
Using local file helloworld.0001.heap.
Total: 9.5 MB
9.5 100.0% 100.0% 9.5 100.0% BigNumber::BigNumber
0.0 0.0% 100.0% 0.0 0.0% __GI__IO_file_doallocate
0.0 0.0% 100.0% 9.5 100.0% main
0.0 0.0% 100.0% 0.0 0.0% _IO_new_file_overflow
0.0 0.0% 100.0% 0.0 0.0% _IO_new_file_xsputn
0.0 0.0% 100.0% 0.0 0.0% __GI__IO_doallocbuf
0.0 0.0% 100.0% 0.0 0.0% __GI__IO_fwrite
0.0 0.0% 100.0% 9.5 100.0% __libc_start_main
0.0 0.0% 100.0% 9.5 100.0% _start
0.0 0.0% 100.0% 0.0 0.0% std::__ostream_insert
0.0 0.0% 100.0% 0.0 0.0% std::operator<<
ここでは、すべての関数に明確な名前が付けられており、リークが BigNumber コンストラクターからのものであることがはっきりとわかります。
上記のアドレスの意味を理解するための正しい方向に誰かが私を向けることができますか?