Versi debug fungsi alokasi timbunan
Pustaka runtime C (CRT) berisi versi Debug khusus dari fungsi alokasi heap. Fungsi-fungsi ini memiliki nama yang sama dengan versi Rilis dengan _dbg
ditambahkan padanya. Artikel ini menjelaskan perbedaan antara versi Rilis fungsi CRT dan _dbg
versi, menggunakan malloc
dan _malloc_dbg
sebagai contoh.
Perilaku dalam build debug
Ketika _DEBUG
ditentukan, CRT memetakan semua malloc
panggilan ke _malloc_dbg
. Oleh karena itu, Anda tidak perlu menulis ulang kode Anda menggunakan _malloc_dbg
alih-alih malloc
menerima manfaat saat penelusuran kesalahan.
Namun, Anda mungkin ingin memanggil _malloc_dbg
secara eksplisit. _malloc_dbg
Panggilan secara eksplisit memiliki beberapa manfaat tambahan:
_CLIENT_BLOCK
Lacak alokasi jenis.Menyimpan file sumber dan nomor baris tempat permintaan alokasi terjadi.
Jika Anda tidak ingin mengonversi panggilan Anda malloc
ke , Anda dapat memperoleh informasi file sumber dengan menentukan _CRTDBG_MAP_ALLOC
, yang menyebabkan prapemrosea langsung memetakan semua panggilan ke malloc
_malloc_dbg
alih-alih mengandalkan pembungkus di sekitar malloc
_malloc_dbg
.
Untuk melacak jenis alokasi terpisah di blok klien, Anda harus memanggil _malloc_dbg
secara langsung dan mengatur blockType
parameter ke _CLIENT_BLOCK
.
Perilaku dalam build non-debug
Ketika _DEBUG
tidak ditentukan, panggilan ke malloc
tidak terganggu, panggilan ke _malloc_dbg
diselesaikan ke malloc
, definisi _CRTDBG_MAP_ALLOC
diabaikan, dan informasi file sumber yang berkaitan dengan permintaan alokasi tidak disediakan. Karena malloc
tidak memiliki parameter jenis blok, permintaan untuk _CLIENT_BLOCK
jenis diperlakukan sebagai alokasi standar.