Sobre o conceito de Alocação de Memória Dinâmica, responda:
  1. 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 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.

Exercícios relacionados