デバッグ バージョンのヒープ割り当て関数

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型の要求は標準割り当てとして扱われます。

関連項目

CRT のデバッグ技術