デバッグ バージョンのヒープ割り当て関数
このトピックの内容は、次の製品に該当します。
エディション |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
ネイティブのみ |
||||
Pro、Premium、Ultimate |
ネイティブのみ |
C ランタイム ライブラリには、デバッグ バージョンの特殊なヒープ割り当て関数があります。 これらの関数は、リリース バージョンの関数名の末尾に "_dbg" を追加した名前になっています。 ここでは、CRT 関数のリリース バージョンと _dbg バージョンとの相違点について、malloc と _malloc_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 に置き換えます。
クライアント ブロック内の個々の割り当て型を追跡するには、blockType パラメーターを _CLIENT_BLOCK に設定して、直接 _malloc_dbg を呼び出す必要があります。
_DEBUG が定義されていない場合は、malloc 呼び出しはそのままですが、_malloc_dbg 呼び出しは malloc に変換されます。また、_CRTDBG_MAP_ALLOC が定義されていても無視されるため、割り当て要求に関連するソース ファイル情報を取得することはできません。 malloc にはブロック型を指定するパラメーターがないため、_CLIENT_BLOCK 型への割り当て要求は標準の割り当てとして扱われます。