Programar em C/Gerenciamento de memória
Origem: Wikilivros, livros abertos por um mundo aberto.
| << Mais sobre variáveis | Índice | Sockets >> |
Tabela de conteúdo |
[editar] Alocação dinâmica
Todos os dados de um programa são armazenados na memória do computador; é muito comum necessitar reservar um certo espaço na memória para poder guardar dados mais tarde. Por exemplo, poderíamos reservar um espaço de 1000 bytes para guardar uma string que o usuário viesse a digitar, declarando um vetor de 1000 caracteres. E se quiséssemos reservar um espaço que só é conhecido no tempo de execução do programa? E se o espaço fosse muito grande, de modo que declarar vetores de tal tamanho seria inconveniente (pois, entre outras coisas, aumenta sem necessidade o tamanho do executável)?
Para solucionar esse problema, existe a alocação dinâmica de memória, que como o nome sugere, é uma maneira de alocar memória à medida que o programa vai sendo executado. As quatro funções relacionadas com a alocação dinâmica serão descritas a seguir.
[editar] malloc e free
Essas duas funções são as mais básicas para o gerenciamento de memória. malloc é responsável pela alocação de um pedaço de memória, e free é responsável por liberar esse pedaço de memória.
Para alocar um espaço na memória, precisamos fornecer à função malloc o número de bytes desejados. Para isso, precisaremos usar o operador sizeof, introduzido na seção anterior. Veja um exemplo.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
/* ponteiro para memória que será alocada */
int *p;
int i;
/* alocar 10 elementos inteiros, ou seja, ( sizeof (int) * 10 ) */
p = (int *) malloc ( sizeof (int) * 10);
if ( p == NULL ) {
printf ("Erro: Não foi possivel alocar memória\n");
exit(1);
}
for(i = 0; i < 10; i++) {
p[i] = i * 2;
printf ("%d\n", p[i]);
}
/* libera a memória alocada por malloc */
free (p);
return 0;
}
É importante notar que a função malloc retorna um ponteiro NULL caso não consiga alocar memória.
[editar] calloc
[editar] realloc
[editar] Alocação dinâmica de vetores
|
Esta página é um esboço de informática. Ampliando-a você ajudará a melhorar o Wikilivros. |