Поделиться через


_msize_dbg

Вычисляет размер блока памяти в куче (отладочные версии).

size_t _msize_dbg(
   void *userData,
   int blockType 
);

Параметры

  • userData
    Указатель на блок памяти для которого для определения размера.

  • blockType
    Тип заданного блока памяти. _CLIENT_BLOCK OR _NORMAL_BLOCK.

Возвращаемое значение

При успешном завершении _msize_dbg возвращает размер (в байтах) заданного блока памяти; в противном случае он возвращает значение NULL.

Заметки

_msize_dbg отладочная версия _msize функция.После _Отладка не определяет каждый вызов _msize_dbg уменьшает к вызову _msize.Оба _msize и _msize_dbg расчет размера блока памяти в куче, но базовой _msize_dbg добавляет функции отладки: 2 Она включает буферы с обеих сторон части пользователя блока памяти в возвращенном размере и она позволяет вычисления размера для определенных типов блокировок.

Сведения о том, как блоки памяти, выделенные инициализируются и управляемые в отладочной версии базовой кучи см. в разделе Управление памятью и куча отладки.Дополнительные сведения о типах блока распределения и способы их использования см. в разделе Типы блоков в куче отладки.Дополнительные сведения о различиях между вызовом стандартная функция кучи и сво в отладочном построении отладочной версии приложения, см. в разделе Использование отладочной версии для базовой версии.

Эта функция проверяет его параметр.If 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. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Подпрограммы отладка

_malloc_dbg