_expand
Altera o tamanho de um bloco de memória.
void *_expand(
void *memblock,
size_t size
);
Parâmetros
memblock
Ponteiro para o bloco de memória anteriormente atribuído.size
Novo tamanho em bytes.
Valor de retorno
_expand retorna um ponteiro nulo para o bloco de memória realocado. _expand, ao contrário de realloc, não pode mover um bloco para alterar seu tamanho. Assim, se houver memória suficiente disponível para expandir o bloco sem o mover, o parâmetro de memblock a _expand é o mesmo que o valor de retorno.
_expand retorna NULL quando um erro é detectado durante sua operação. Por exemplo, se _expand é usado para reduzir um bloco de memória, pode detectar danos no heap do bloco pequeno ou um ponteiro de bloco e um retorno NULLinválidos.
Se houver memória suficiente disponível para expandir o bloco ao tamanho especificado sem o mover, a função retornará NULL. _expand nunca retorna um bloco expandido para um tamanho menor que a solicitada. Se ocorrer uma falha, errno indica a natureza da falha. Para obter mais informações sobre errno, consulte errno, _doserrno, _sys_errlist e _sys_nerr.
O valor de retorno para um espaço de armazenamento que é garantia de ser alinhado adequadamente para o armazenamento de qualquer tipo de objeto. Para verificar se o novo tamanho do item, use _msize. Para obter um ponteiro para um tipo diferente de void, use uma conversão de tipos no valor de retorno.
Comentários
A função de _expand o tamanho de um bloco de memória alocado anteriormente tentando expandir ou reduzir o bloco sem mover seu local no heap. O parâmetro de memblock ao início do bloco. O parâmetro de size do novo tamanho do bloco, em bytes. O conteúdo do bloco não serão alteradas até o mais curto dos novos e antigos tamanhos. memblock não deve ser um bloco que seja liberado.
Dica
Em plataformas de 64 bits, _expand não pode reduzir o bloco se o novo tamanho seja menor que o tamanho atual; em particular, se o bloco menor que 16K foi atribuído em tamanho e como consequência baixo no heap de fragmentação, _expand deixar o bloco inalterada e retorna memblock.
Quando o aplicativo é vinculado a uma versão de depuração das bibliotecas de tempo de execução C, _expand resolve a _expand_dbg. Para obter mais informações sobre como o heap é gerenciado durante o processo de depuração, consulte O heap de depuração do CRT.
Essa função valida seus parâmetros. Se memblock for um ponteiro nulo, essa função invoca um manipulador inválido do parâmetro, conforme descrito em Validação do parâmetro. Se a execução puder continuar, errno será definido como EINVAL e a função retornará NULL. Se size é maior que _HEAP_MAXREQ, errno está definido como ENOMEM e a função retorna NULL.
Requisitos
Função |
Cabeçalho necessário |
---|---|
_expand |
<malloc.h> |
Para informações adicionais de compatibilidade, consulte Compatibilidade na Introdução.
Exemplo
// crt_expand.c
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
char *bufchar;
printf( "Allocate a 512 element buffer\n" );
if( (bufchar = (char *)calloc( 512, sizeof( char ) )) == NULL )
exit( 1 );
printf( "Allocated %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
if( (bufchar = (char *)_expand( bufchar, 1024 )) == NULL )
printf( "Can't expand" );
else
printf( "Expanded block to %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
// Free memory
free( bufchar );
exit( 0 );
}
Equivalência do .NET Framework
Não aplicável. Para chamar a função padrão de C, use PInvoke. Para obter mais informações, consulte Exemplos de chamadas de plataformas.