_msize_dbg
Вычисляет размер блока памяти в куче (только отладочная версия).
size_t _msize_dbg(
void *userData,
int blockType
);
Параметры
userData
Указатель на блок памяти для определения размера.blockType
Тип указанного блока памяти: _CLIENT_BLOCK или _NORMAL_BLOCK.
Возвращаемое значение
При успешном завершении _msize_dbg возвращает размер (в байтах) указанного блока памяти; в противном случае возвращается значение NULL.
Заметки
_msize_dbg - отладочная версия функции _msize. Если _DEBUG не определена, каждый вызов _msize_dbg сводится к вызову _msize. И _msize, и _msize_dbg вычисляют размер блока памяти в куче, но _msize_dbg добавляет две функции отладки: Она включает буферы по обеим сторонам участка пользовательской части блоков памяти возвращенного размера, и она позволяет вычислять размер для определенных типов блоков.
Сведения о том, как происходит выделение, инициализация и управление блоками памяти в отладочной версии базовой кучи см. в разделе Сведения о куче отладки CRT. Дополнительные сведения о типах блока выделения и способах их использования см. в разделе Типы блоков в куче отладки. Сведения о различиях между вызовом стандартной функции кучи и ее отладочной версии в отладочной сборке приложения см. в разделе Версии отладки функций выделения кучи.
Эта функция проверяет свой параметр. Если memblock является указателем на null, _msize вызывает обработчик недопустимого параметра, как описано в Проверка параметров. Если ошибка обработана, то функция устанавливает errno в EINVAL и возвращает -1.
Требования
Подпрограмма |
Обязательный заголовок |
---|---|
_msize_dbg |
<crtdbg.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость во введении.
Библиотеки
Только отладочные версии Библиотеки времени выполнения языка C.
Пример
// crt_msize_dbg.c
// compile with: /MTd
/*
* This program allocates a block of memory using _malloc_dbg
* and then calls _msize_dbg to display the size of that block.
* Next, it uses _realloc_dbg to expand the amount of
* memory used by the buffer and then calls _msize_dbg again to
* display the new amount of memory allocated to the buffer.
*/
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <crtdbg.h>
int main( void )
{
long *buffer, *newbuffer;
size_t size;
/*
* Call _malloc_dbg to include the filename and line number
* of our allocation request in the header
*/
buffer = (long *)_malloc_dbg( 40 * sizeof(long), _NORMAL_BLOCK, __FILE__, __LINE__ );
if( buffer == NULL )
exit( 1 );
/*
* Get the size of the buffer by calling _msize_dbg
*/
size = _msize_dbg( buffer, _NORMAL_BLOCK );
printf( "Size of block after _malloc_dbg of 40 longs: %u\n", size );
/*
* Reallocate the buffer using _realloc_dbg and show the new size
*/
newbuffer = _realloc_dbg( buffer, size + (40 * sizeof(long)), _NORMAL_BLOCK, __FILE__, __LINE__ );
if( newbuffer == NULL )
exit( 1 );
buffer = newbuffer;
size = _msize_dbg( buffer, _NORMAL_BLOCK );
printf( "Size of block after _realloc_dbg of 40 more longs: %u\n", size );
free( buffer );
exit( 0 );
}
Output
Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320
Эквивалент в .NET Framework
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.