Qual a diferença entre alocação estática e alocação dinâmica?

Passo 1

O exercício pergunta qual a diferença entre alocação estática e alocação dinâmica na programação, mais especificamente em linguagens como C ou C++. Vamos precisar entender como a memória é organizada (segmentos de dados, pilha e heap) e quais mecanismos cada tipo de alocação usa.

Passo 2

Alocação estática é quando o compilador reserva um espaço de memória para variáveis com tamanho e tempo de vida definidos em tempo de compilação. Em C, isso acontece para variáveis globais, variáveis estáticas e arrays com tamanho constante. Essa memória fica geralmente no segmento de dados do programa e seu tamanho não pode mudar durante a execução.

Passo 3

Alocação dinâmica ocorre em tempo de execução, ou seja, só sabemos se precisamos ou não daquele espaço de memória quando o programa está rodando. Em C usamos funções como malloc(), calloc() e realloc() para pedir memória no heap. Como o programador faz esse pedido, ele também precisa liberar com free() para evitar vazamentos de memória.

Passo 4

Do ponto de vista prático, na alocação estática você tem simplicidade e menor overhead, mas falta flexibilidade, já que o tamanho é fixo. Na alocação dinâmica, ganha-se flexibilidade para trabalhar com estruturas de tamanhos variáveis, mas é preciso gerenciar manualmente a vida desses blocos e tomar cuidado com erros de alocação ou vazamentos.

Resposta

Alocação estática reserva em tempo de compilação um espaço fixo cuja duração e tamanho não mudam em tempo de execução; alocação dinâmica reserva em tempo de execução blocos de memória no heap, permitindo tamanhos e durações variáveis, mas exigindo que o programador faça alocar e liberar manualmente.

Exercícios relacionados