Fedora9 x86_64上で C++ を書いているが、メモリリークを調べるため gperftools(Google Performance Tools) を利用してみる。

gperftools は以下のサイトからダウンロードできる。
http://goog-perftools.sourceforge.net/

gperftools は元のプログラムにリンクするだけで以下の4機能を利用できるようになる。
・TC Malloc
・Heap Checker
・Heap Profiler
・Cpu Profiler

TC Malloc はmallocをより高速なメモリ確保を行う実装に挿げ替えるというもので、リンクするだけでパフォーマンスがよくなる。

それ以外の3機能は、それぞれ専用の環境変数を設定してからプログラムを実行することで、プロファイルを行う。結果はファイルに出力されるので、後で出力ファイルを解析する。メモリリークの検出はHeap Checker を使う。

以下に gperftools のインストール手順を示す。
yum install libunwind

cd /tmp
wget https://gperftools.googlecode.com/files/gperftools-2.1.zip
unzip gperftools-2.1.zip
cd gperftools-2.1
./confire --enable-frame-pointers 
make

Fedora9 x86_64 の環境では、gperftoolsのコンパイルには libunwind が必要となるので、まず libunwind をインストールした。また configure は --enable-frame-pointers を指定する必要があった。

以上でインストールは完了なのだが、インストールが終わったらリンクフラグ -ltcmalloc を指定して、プログラムをリンクし直す。

ここで実行してみると libtcmalloc.so.4 がないというエラーが出た。このファイルは /usr/local/lib に存在するのだが、パスを通す必要があるようだ。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

これで無事実行できた。

以上で gperftools の導入は完了である。