Stack, heap e endereços de memória: introdução
Objetivo
Reconhecer endereços virtuais, stack e heap sem confundi-los com componentes físicos separados.
Conceitos essenciais
Endereços
Processos normalmente trabalham com um espaço de endereçamento virtual. Um endereço usado pelo programa não deve ser interpretado automaticamente como posição física direta de RAM.
Stack
A stack de uma thread ajuda a suportar chamadas de função, endereços de retorno e dados de frames. Compiladores e runtimes podem otimizar onde variáveis específicas são realmente mantidas.
Heap
Heap é um conceito/região associada a alocações dinâmicas de memória. Não é um chip físico separado.
Gerenciamento
Em C, alocação pode ser manual; em runtimes gerenciados, garbage collection pode recuperar objetos não mais alcançáveis. Em ambos os casos, memória é recurso finito.
Falhas típicas
Recursão sem limite pode esgotar stack; retenção indevida de memória pode causar vazamentos ou crescimento indesejado.
Modelo mental
PROCESSO → ESPAÇO VIRTUAL → [CÓDIGO | DADOS | HEAP | STACKS | BIBLIOTECAS]Exemplo e demonstração
Exemplo conceitual em C: x é uma variável automática e p recebe memória dinâmica. A localização exata pode ser alterada por otimizações.
#include <stdlib.h>
int main(void) {
int x = 10;
int *p = malloc(sizeof(int));
if (p) { *p = x; free(p); }
return 0;
}Experimento / prática
- Desenhe um espaço virtual simplificado de processo.
- Explique por que stack e heap não são componentes físicos como RAM ou SSD.
Erros comuns
- Toda variável local fica obrigatoriamente na stack.
- Heap significa memória física diferente da RAM.
- Garbage collector elimina qualquer possibilidade de retenção indevida de memória.
Resumo
Ao concluir esta aula, revise o modelo mental e tente explicá-lo com suas próprias palavras antes de avançar.