
C / C++ と valgrind
Valgrind は C / C ++ のmemory debugger です。Valgrind
にはいくつかの機能がありますが、私は以下の機能を使っています。C / C++ のプログラマで memory debugger
を使ったことなければすぐに使ったほうがいいです。こんなことを検証してくれま
す。
- malloc / free, new / delete の関係の正しさの検証
- 配列のオーバーフロー、アンダーフロー、そ
の他のメモリアクセスの正しさの検証
- 初期化されていない変数の使用の検出
- 実行時間のボトルネックの調査
- memory leak の発見
- thread の lock
順序の正しさの検証
その他以下の機能もあるようですが使っていません。
- キャッシュの有効性、メモリアクセスのローカル性の調査
- pthread の memory競合の検証
ここに original があります。商用の purify
等と競合します。私も昔は purify で満足していましたが、自宅で debug するときは使えないのでだんだん purify から
valgrind に移行しています。purify と valgrind を比較すると、
valgrind の方が良い点
- 再コンパイルの必要がない。
- ライセンスが要らない。
purifyの方が良い点
- 動作するplatform が多い。valgrind は Linux のみ。
- valgrind よりは早い。
- API があって未初期化をチェックできる。
経験的には、普通の memory access の問題で、purify では発見される問題が valgrind
では発見できないといことはないでしょう。