問題タブ [google-perftools]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - tcmalloc が dlopen 経由で提供される関数名を出力しない理由
次のプロジェクトがあります: main.cpp
共有.cpp:
およびメイクファイル:
このテスト プログラムをデバッグするために tcmalloc を使用します。このテスト プログラムは動的に libshared.so:foo をロードし、it.run コマンドを実行します: LD_PRELOAD=/usr/local/lib/libtcmalloc.so HEAPCHECK=normal ./a.out
1 つの最大のリーク:
- ローカル ファイル ./a.out を使用します。
- 割り当てられた 1 つのオブジェクトで 40 バイトのリーク:
- @ 7fe3460bd9ba 0x00007fe3460bd9ba
- @400b43 メイン
- @ 7fe346c33ec5 __libc_start_main
- @ 400999 _start
- @ 0_init
foo 関数で line ではなくアドレス 0x00007fe3460bd9ba を取得するのはなぜですか? 助けてください
Ps LD_PRELOAD=.../tcmalloc.so で gdb を使用しようとしましたが、次のメッセージが表示されます。
c++ - このプログラムを共有ライブラリでコンパイルして実行すると、tcmalloc が失敗するのはなぜですか?
ここのコードに似たコード: なぜ tcmalloc は、dlopen 経由で提供される関数名を出力しないのですか?
メイクファイル:
- 全て:
- g++ -fPIC -g -c shared.cpp -ltcmalloc
- g++ -shared -o shared_libs/libshared.so -g shared.o -ltcmalloc
- g++ -L shared_libs/ -g main.cpp -ldl -ltcmalloc
プログラムを実行すると:
コアファイルを含むgdbは次のように述べています:
cpython - gperftools がファイルの識別に失敗する
Google パフォーマンス ツールがファイルを "??:?" としてリストするのを避ける方法はありますか? 呼び出されている関数がどのライブラリに含まれているかを調べるにはどうすればよいですか?
多くのコンパイル済み C 拡張モジュールを含む python パッケージで C コードをプロファイリングできるようにすることを目指しています。上記のおもちゃの例で、「dtrsm_」が定義されている場所を突き止めるにはどうすればよいでしょうか? 同じ名前の関数を含む複数のロード済みライブラリがある場合、どのバージョンが呼び出されているかを知る方法はありますか?
c++ - tcmalloc とリンクするとメモリ使用量が 500MB 削減されるのはなぜですか?
私のプログラムでは、それぞれ 100 万の要素を持つ 5 つのベクトルを作成します。O3 最適化を使用してプログラムをコンパイルすると、実行中に約 2 GB かかります。ただし、O3 の最適化を使用してコンパイルし、google-perf が提供する tcmalloc ライブラリとリンクすると、最大 1.5 GB の常駐セット サイズしか必要としません。誰かが私になぜこれが起こるのか説明してもらえますか? tcmalloc に対するリンクは、glibc malloc に対するリンクより常に優れていますか?