_msize_dbg
Calcula o tamanho de um bloco de memória no heap (somente a versão de depuração).
size_t _msize_dbg(
void *userData,
int blockType
);
Parâmetros
userData
Ponteiro para o bloco de memória para o qual determinar o tamanho.blockType
Tipo de bloco de memória especificado: _CLIENT_BLOCK ou _NORMAL_BLOCK.
Valor de retorno
Após a conclusão bem-sucedida, _msize_dbg retorna o tamanho (em bytes) do bloco de memória especificada; Caso contrário, ele retornará NULL.
Comentários
_msize_dbgé uma versão de depuração do _Mtamanho função.Quando _ Debug não está definido, cada chamada para _msize_dbg é reduzido a uma chamada para _msize.Ambos _msize e _msize_dbg calcular o tamanho de um bloco de memória na pilha de base, mas _msize_dbg adiciona dois recursos de depuração: ele inclui os buffers em ambos os lados da parte de usuário do bloco de memória no tamanho retornado e permite que os cálculos de tamanho para tipos específicos de bloco.
Para obter informações sobre como blocos de memória são alocados, inicializados e gerenciados na versão de depuração da pilha base, consulte Gerenciamento de memória e a pilha de depuração.Para obter informações sobre os tipos de bloco de alocação e como eles são usados, consulte Tipos de blocos no Heap Debug.Para obter informações sobre as diferenças entre chamar uma função de heap padrão e sua versão de depuração em uma compilação de depuração de um aplicativo, consulte usando a depurar versão na Base de versão.
Esta função valida seu parâmetro.Se memblock é um ponteiro nulo, _msize invoca um manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro.Se o erro é manipulado, a função define errno para EINVAL e retorna -1.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
_msize_dbg |
<crtdbg.h> |
Para obter mais informações de compatibilidade, consulte compatibilidade na introdução.
Bibliotecas
Versões de depuração de bibliotecas de tempo de execução c somente.
Exemplo
// 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 );
}
Saída
Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320
Equivalência do .NET Framework
Não aplicável. Para chamar a função c padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.