Valgrind は、メモリデバッグや、メモリリークの検出、スレッドエラーの検出、プロファイリングなどを行うための仮想機械を利用したソフトウェア開発ツールである。Valgrind という名前は、北欧神話におけるヴァルハラへの入り口の名に由来している。Valgrind は元々 x86 上の Linux 用のメモリデバッグツールとして設計されたが、開発が進んだ結果、バグ検出やプロファイラといった動的解析ツールのための汎用のフレームワークとなっている。Valgrind は多数の Linux 関連のプロジェクトで使用されている。Valgrind は GNU General Public License の元でリリースされているフリーソフトウェアである。Valgrind は、本質的には JIT コンパイラ(バイナリ変換)の技術を用いた仮想機械である。元々のプログラムそのものがホストのプロセッサで直接実行されるわけではない。代わりに、VEX と呼ぶライブラリを使い、Valgrind はまずプログラムを中間表現(IR, Intermediate Representation)に変換する。中間表現自体はプロセッサ非依存であり、SSA ベースである。変換の後、Valgrind が中間表現をマシンコードに再度変換してホストプロセッサで実行させるが、その前後で「ツール」(下記参照)は IR に対して自由に操作を行うことができる。かなりのパフォーマンスがこれらの変換の過程(およびツールが挿入するコード)で損なわれ、プログラムは Valgrind 上では(全くツールを使用しない場合でも)通常より4〜5倍低速に動作する。しかし、仮想機械による IR の形態は計測・解析・デバッグには適している。これによりツールの開発が簡単になり、大半のプロジェクトでは、デバッグ中のこの程度の性能の低下は大きな問題ではない。システムコールも Valgrind で一度取り扱ってから、ホスト OS のシステムコールを呼び出す。仮想機械として仮想化するのは CPU とメモリのみであり、それ以外のハードウェアはホスト OS の物をそのまま使う。多数のツールが Valgrind に含まれている。また、外部から提供されているものもある。標準であり、最もよく利用されているツールは Memcheck である。Memcheck はほぼ全ての命令に特別なのコードを挿入し、「正当性」 (初期化が行われるまでは、割り当て済みでないメモリは全て無効であるか、未定義である)があり、「アドレス可能」(メモリアドレスが割り当て済みで、解放されていないメモリブロックを指している)であるかという情報が、それぞれ "V ビット" および "A ビット" に格納されているかを追跡する。データは移動したり加工されたりするが、計測用のコードは1ビットレベルで正確であるように A, V ビットを追跡する。対照的に、他のメモリチェックツール()などは未初期化メモリのコピーの検出のみ行う(ただし、必ずしも問題があるわけではない)。さらに、Memcheckは標準のCメモリアロケータを独自の実装に置き換え、割り当て済みブロックの前後にメモリガード(無効に設定されたAビットを持っている)を挿入する。この機能により、Memcheckはプログラムが割り当てられたブロックよりわずかに外側の領域を読み書きするoff-by-oneエラーを検出できる(この問題に対する別の対応策として、コンパイラにを実装し、特にヒープではなくスタックに確保されたメモリのメモリエラーの検出漏れを低減させる方法があるが、計測するバイナリコードを全てリコンパイルする必要がある)。Memcheckが検出や警告可能な問題には下記のものがある。こうした機能への代償として性能が低下する。Memcheckの元で動作するプログラムはValgrindなしで動作する場合と比べて5倍から20倍遅く、より多くのメモリを使用する(メモリ確保ごとにかなりのメモリを追加で消費する)。したがって、ほとんどの開発者は常にMemcheck(あるいは他のValgrindツール)の元でコードを走らせることはしない。特定のバグを解析したり、(Memcheckが検出可能な種類の)潜在的なバグがないことを検証するために使用するのが最も典型的な方法である。パフォーマンスのペナルティに加えて、Memcheck の重大な制約事項は、ヒープメモリに対するチェックツールであり、スタック変数・静的変数に対する境界違反を検出することができない点である。下記のコードは コメントに示すようなエラーが存在するにもかかわらず Memcheck で合格となる。これらに対しては SGCheck が開発中である。この種類のエラーが検出できないことは、ソフトウェアが、バッファオーバーランを生じた場合、古典的なに対してセキュリティホールになりうるため、注目すべき点である。Memcheck 以外に、Valgrind には下記のツールが標準で同梱されている。このツールはバージョン 3.2.0の時点で削除された。バージョン 3.10.0 現在、Valgrind は 以下のプラットフォームをサポートしている。その他、Unix系プラットフォームへの非公式な移植版が存在する(FreeBSD や NetBSD など)。Microsoft Windows 向けの移植版は現時点では存在しない(また、短期的にも公式な計画はない)が、Linux 上で動作する Windows ソフトウェアをデバッグするため Wine と接続することができる実験的なバージョンが存在する。プラットフォームのサポートを増やすことは長期的な目標であるが、プロジェクトの性質から非常に多くの作業を必要とする。Valgrind の元々の開発者は、 であり、彼は2006年に Valgrind に関する功績で Google-O'Reilly Open Source Award を受賞した。彼以外の開発者も重要な貢献を行っており、Cerion Armour-Brown、Jeremy Fitzhardinge、Tom Hughes、Nicholas Nethercote、Paul Mackerras、Dirk Mueller、Josef Weidendorfer、Robert Walsh などが挙げられる。
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。