Alocamento de memória dinâmico em C |
Que é alocamento de memória dinâmico?
|
O alocamento de memória dinâmico é definido como dinâmicamente o alocamento do espaço para variáveis no runtime.
É desperdiçador ao tratar do tipo estruturas da disposição alocar tanto o espaço quando se declara
|
Cinco função do ANSI Standartd usada no alocamento de memória dinâmico
|
O ANSI C fornece cinco funções padrão que lhe ajudarão alocar a memória no heap que são como segue:
- sizeof ()
- malloc ()
- calloc ()
- realloc ()
- livrar ()
|
A seguinte tabela descreve as cinco funções padrão diferentes que as ajudas você alocam a memória dinâmicamente
|
Function |
Task |
sizeof |
The sizeof() function returns the memory size of the requested variable |
malloc |
Allocates memory requests size of bytes and returns a pointer to the Ist byte of
allocated space |
calloc |
Allocates space for an array of elements initializes them to zero and returns a pointer to the
memory |
free |
Frees previously allocated space |
realloc |
Modifies the size of previously allocated space. |
|
sizeof ()
|
A função do sizeof () retorna o tamanho de memória da variável pedida. Esta chamada deve ser usada na junção com a ligação de controle do calloc (), de modo que somente a memória necessária seja alocada, melhor que em um tamanho fixo. Considerar o seguinte,
|
struct date {
int hour, minute, second;
};
int x;
x = sizeof( struct date );
|
|
malloc ()
|
Uma memória do mf do bloco pode ser alocada usando a função chamada malloc. A função do malloc reserva um bloco da memória do tamanho especificado e retorna um ponteiro do tipo vácuo. Isto significa que nós podemos o atribuir a qualquer tipo do ponteiro. Faz exame do seguinte formulário:
|
ptr=(cast-type*)malloc(byte-size);
|
|
o ptr é um ponteiro do tipo mold-tipo que o malloc retorna um ponteiro (do tipo moldado) a uma área de memória com o byte-tamanho do tamanho. O seguinte é o exemplo de usar a função do malloc
|
x=(int*)malloc(100*sizeof(int));
|
|
calloc ()
|
Calloc é uma outra função de alocamento da memória que seja usada normalmente pedir os blocos múltiplos do armazenamento cada um do mesmo tamanho e ajustada então todos os bytes a zero. O formulário geral do calloc é:
|
ptr=(cast-type*) calloc(n,elem-size);
|
|
A indicação acima aloca o espaço contíguo para blocos de n cada tamanho dos bytes do tamanho dos elementos. Todos os bytes são inicializados a zero e um ponteiro ao primeiro byte da região alocada é retornado. Se não houver bastante espaço um ponteiro nulo está retornado também.
|
realloc ()
|
A memória alocada usando o calloc ou o malloc pôde ser insuficiente ou excesso às vezes em ambas as situações que nós podemos mudar o tamanho de memória alocado já com a ajuda da função chamada realloc. Este processo é chamado o reallocation da memória. A indicação geral do reallocation da memória é:
|
ptr=realloc(ptr,newsize);
|
|
livrar ()
|
Compilar o armazenamento do tempo de uma variável é alocado e liberado pelo sistema de acordo com sua classe do armazenamento. Com o alocamento runtime dinâmico, é nossa responsabilidade liberar o espaço quando não se requer em tudo. Quando o armazenamento é limitado, a liberação do espaço de armazenamento torna-se importante. Quando nós já não necessitamos os dados que nós armazenamos em um bloco da memória e nós não pretendemos usar-se que o bloco para armazenar toda a outra informação, usando a função livre, nós pode liberar esse bloco da memória para o uso futuro.
|
|
o ptr é um ponteiro que seja criado usando o calloc ou o malloc.
|
O seguinte programa ilustra o reallocation da memória usando o realloc () e o malloc ()
|
/*Example program for reallocation*/
#include< stdio.h >
#include< stdlib.h >
define NULL 0
main()
{
char *buffer;
/*Allocating memory*/
if((buffer=(char *) malloc(10))==NULL)
{
printf("Malloc failed\n");
exit(1);
}
printf("Buffer of size %d created \n",_msize(buffer));
strcpy(buffer,Bangalore);
printf(\nBuffer contains:%s\n,buffer);
/*Reallocation*/
if((buffer=(char *)realloc(buffer,15))==NULL)
{
printf("Reallocation failed\n");
exit(1);
}
printf("\nBuffer size modified".\n);
printf("\nBuffer still contains: %s\n",buffer);
strcpy(buffer,Mysore);
printf("\nBuffer now contains:%s\n",buffer);
/*freeing memory*/
free(buffer);
}
|
|
|
|
Keywords:
Dynamic Memory Allocation in C,
dynamic memory allocation in c++,
c arrays,
c tutorial,
c array,
void c,
c syntax,
unix memory,
value allocation,
c language,
return c,
memory type,
dynamic example,
dynamic algorithm,
dynamic tutorial,
c example,
c algorithm,
variable c,
c type,
c program,
memory size,
unix c
|