_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 alocada anteriormente.size
Novo tamanho em bytes.
Valor de retorno
_expandRetorna um ponteiro nulo para o bloco de memória realocada._expand, ao contrário do realloc, não é possível mover um bloco para alterar seu tamanho.Portanto, se não houver memória suficiente disponível para expandir o bloco sem movê-lo, o memblock parâmetro para _expand é o mesmo que o valor de retorno.
_expandRetorna NULL quando um erro é detectado durante sua operação.Por exemplo, se _expand é usado para reduzir um bloco de memória, ele pode detectar a corrupção no heap de blocos pequenos ou um ponteiro de bloco inválido e retornar NULL.
Se houver memória suficiente disponível para expandir o bloco para o tamanho de sem movê-lo, a função retornará NULL._expandnunca retorna um bloco expandido para um tamanho menor que o solicitado.Se ocorrer uma falha, errno indica a natureza da falha.Para obter mais informações sobre o errno, consulte errno, _doserrno, _sys_errlist e _sys_nerr.
O valor de retorno aponta para um espaço de armazenamento que é garantido para ser devidamente alinhado para o armazenamento de qualquer tipo de objeto.Para verificar o novo tamanho do item, use _msize.Para obter um ponteiro para um tipo diferente de void, use um tipo de projeção no valor de retorno.
Comentários
O _expand função altera o tamanho de um bloco de memória alocada previamente tentando expandir ou contrair o bloco sem mover seu local na pilha.O memblock parâmetro aponta para o início do bloco.O size parâmetro fornece o novo tamanho do bloco, em bytes.O conteúdo do bloco está inalterado até o menor dos tamanhos de novos e antigos.memblocknão deve ser um bloco que tinha sido liberado.
Observação |
---|
Em plataformas de 64 bits, _expand não pode contrair o bloco se o novo tamanho for menor que o tamanho atual. em particular, se o bloco foi menos de 16 K de tamanho e, portanto, são alocados no Heap de fragmentação de baixo, _expand deixa o bloco inalterado e retorna memblock. |
Quando o aplicativo está vinculado com uma versão de depuração das bibliotecas de tempo de execução C, _expand resolve para _expand_dbg.Para obter mais informações sobre como a pilha é gerenciada durante o processo de depuração, consulte A pilha de depuração CRT.
Esta função valida seus parâmetros.Se memblock é um ponteiro nulo, essa função chama um manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro.Se a execução terá permissão para continuar, errno for definido como EINVAL e a função retornará NULL.Se size é maior do que _HEAP_MAXREQ, errno for definido como ENOMEM e a função retornará NULL.
Requisitos
Função |
Cabeçalho necessário |
---|---|
_expand |
<malloc.h> |
Para obter 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 c padrão, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.