デバッグ バージョンのヒープ割り当て関数
C ランタイム (CRT) ライブラリには、ヒープ割り当て関数の特別なデバッグ バージョンが含まれています。 これらの関数の名前は Release バージョンと同じで、 _dbg
が追加されています。 この記事では、例としてmalloc
と_malloc_dbg
を使用して、CRT 関数のリリース バージョンと_dbg
バージョンの違いについて説明します。
デバッグ ビルドでの動作
_DEBUG
が定義されている場合、CRT はすべてのmalloc
呼び出しを_malloc_dbg
にマップします。 そのため、デバッグ中に利点を得るためにmalloc
の代わりに、_malloc_dbg
を使用してコードを書き直す必要はありません。
しかし、明示的に _malloc_dbg
を呼び出すこともできます。 明示的に _malloc_dbg
を呼び出すと、さらに次の利点があります。
_CLIENT_BLOCK
型の割り当てを追跡できます。割り当て要求が発生したソース ファイルと行番号を格納できます。
malloc
呼び出しを_malloc_dbg
に変換しない場合は、_CRTDBG_MAP_ALLOC
を定義してソース ファイル情報を取得できます。これにより、プリプロセッサは、malloc
のラッパーに依存するのではなく、malloc
へのすべての呼び出しを_malloc_dbg
に直接マップします。
クライアント ブロック内の個々の割り当て型を追跡するには、_malloc_dbg
パラメーターを blockType
に設定して、直接 _CLIENT_BLOCK
を呼び出す必要があります。
非デバッグ ビルドでの動作
_DEBUG
が定義されていない場合、malloc
の呼び出しは応答されず、_malloc_dbg
の呼び出しはmalloc
に解決され、_CRTDBG_MAP_ALLOC
の定義は無視され、割り当て要求に関連するソース ファイル情報は提供されません。 malloc
にはブロック型パラメーターがないため、_CLIENT_BLOCK
型の要求は標準割り当てとして扱われます。