Sobre o conceito de Alocação de Memória Dinâmica, responda:
- Explique a diferença entre alocação estática e alocação dinâmica de memória em C.
Passo 1
O enunciado pede para distinguir dois modos de reservar memória em programas C: a alocação estática, que acontece em tempo de compilação, e a alocação dinâmica, que ocorre em tempo de execução. Para isso, precisamos entender como o compilador e o sistema operacional organizam a memória (segmentos de dados, pilha e heap) e quais mecanismos a linguagem oferece para cada caso.
Passo 2
Na alocação estática, o espaço de memória para variáveis ou arrays é determinado em tempo de compilação. Exemplos típicos são variáveis globais e arrays locais com tamanho literal, como
int v[\(100\)];
Esse bloco de memória fica em segmentos fixos (dados ou pilha), seu tamanho não pode mudar em tempo de execução e é liberado automaticamente quando a função termina (no caso da pilha) ou no fim do programa (no caso de globais).
Passo 3
Na alocação dinâmica, o programa solicita e libera blocos de memória em tempo de execução usando funções da biblioteca padrão, como
malloc
, calloc
, realloc
e free
. Por exemplo,int *p \(=\) malloc(n * sizeof(int));
Aqui o tamanho
n
pode ser variável, decidido pelo usuário ou calculado em tempo de execução, e o espaço é obtido no heap. A responsabilidade de devolver esse bloco ao sistema cabe ao programador, chamando free(p)
quando ele não for mais necessário.Passo 4
Comparando os dois mecanismos:
A alocação estática é mais simples (sem chamadas de biblioteca nem riscos de vazamento de memória), mas inflexível, pois exige que o compilador conheça todos os tamanhos antecipadamente. Já a alocação dinâmica é muito flexível (permite estruturas de tamanho variável e ajustá-las em execução) mas exige controle manual sobre
A alocação estática é mais simples (sem chamadas de biblioteca nem riscos de vazamento de memória), mas inflexível, pois exige que o compilador conheça todos os tamanhos antecipadamente. Já a alocação dinâmica é muito flexível (permite estruturas de tamanho variável e ajustá-las em execução) mas exige controle manual sobre
malloc
/free
, sob risco de vazamentos (memory leaks) ou acessos inválidos (dangling pointers).Resposta
Alocação estática em C reserva em tempo de compilação blocos de tamanho fixo (variáveis globais ou locais com tamanho literal), cujo gerenciamento de vida é automático. Alocação dinâmica reserva em tempo de execução blocos no heap com tamanho decidido em execução, usando
malloc
/free
, e exige que o programador gerencie explicitamente a liberação da memória para evitar vazamentos.