
Segmento de Código (Texto)
- O que é: Contém as instruções executáveis do programa (o código compilado).
- Função: Armazena as instruções que a CPU irá executar.
- Características:
- É normalmente somente leitura para evitar alterações acidentais.
- Pode ser compartilhado entre processos que usam o mesmo programa, economizando memória.
Segmento Estático/Global
- O que é: Armazena variáveis globais e estáticas.
- Função: Contém variáveis que permanecem alocadas durante toda a execução do programa.
- Características:
- Dividido em duas partes:
- Dados Inicializados: Armazena variáveis globais que foram inicializadas explicitamente no código (ex.:
int x = 10;).
- Dados Não Inicializados (BSS): Contém variáveis globais declaradas, mas não inicializadas (ex.:
int x;).
- A alocação dessas variáveis é feita durante a compilação ou o carregamento do programa.
Pilha (Stack)
- O que é: Utilizada para chamadas de funções e variáveis locais.
- Função:
- Armazena:
- Variáveis locais de funções (ex.:
int x dentro de uma função).
- Endereços de retorno das funções (para saber para onde voltar após uma função terminar).
- Gerencia o fluxo de execução do programa.
- Características:
- Funciona como uma estrutura LIFO (último a entrar, primeiro a sair).
- A memória é automaticamente alocada e liberada quando funções são chamadas e terminam.
- Tamanho limitado: pode causar um estouro de pilha (stack overflow) com recursões profundas ou uso excessivo de variáveis locais.
Heap
- O que é: Usada para alocação dinâmica de memória.
- Função:
- Permite que o programa aloque e libere memória de forma manual durante a execução.
- Exemplos:
- Em C,
malloc ou calloc alocam memória no heap.
- Em Python, o uso de objetos (listas, dicionários, etc.) utiliza o heap.
- Características:
- Cresce dinamicamente (ao contrário da pilha).
- A memória precisa ser gerenciada manualmente (liberada quando não for mais necessária, ex.:
free() em C).
- Pode causar problemas como vazamento de memória (quando a memória alocada não é liberada).