Gostaria de saber qual é a diferença entre alocação estática de memória e alocação dinâmica de memória?
Poderia explicar isto com algum exemplo?
Existem três tipos de atribuição - estática, automática e dinâmica.
Alocação estática significa, que a memória para as suas variáveis é alocada quando o programa começa. O tamanho é fixo quando o programa é criado. Aplica-se a variáveis globais, variáveis de âmbito de ficheiro, e variáveis qualificadas com `estáticas' definidas dentro de funções.
**A alocação automática de memória** ocorre para variáveis (não estáticas) definidas dentro de funções, e é normalmente armazenada no pilha* (embora a norma C não't determine que seja utilizada uma pilha). Não é necessário reservar memória extra utilizando-as, mas, por outro lado, têm também um controlo limitado sobre a vida útil desta memória. Por exemplo: as variáveis automáticas numa função só existem até que a função termine.
void func() {
int i; /* `i` only exists during `func` */
}
**Afectação dinâmica da memória*** é um pouco diferente. Agora controla-se o tamanho exacto e a duração destes locais de memória. Se não'não o libertar, você'vai encontrar fugas de memória, o que pode causar o colapso da sua aplicação, uma vez que, a dada altura, o sistema não pode atribuir mais memória.
int* func() {
int* mem = malloc(1024);
return mem;
}
int* mem = func(); /* still accessible */
No exemplo superior, a memória atribuída ainda é válida e acessível, mesmo que a função tenha terminado. Quando se termina com a memória, é necessário libertá-la:
free(mem);
Alocação de Memória Estática:
Alocação da Memória Dinâmica:
Alocação estática de memória. A memória alocada estará em pilha.
int a[10];
Alocação dinâmica de memória. A memória alocada estará em pilha.
int *a = malloc(sizeof(int) * 10);
e este último deve ser livred uma vez que não há nenhum Colector de Lixo(GC) em C.
free(a);