Stack, heap e endereços de memória: introdução

Reconhecer endereços virtuais, stack e heap sem confundi-los com componentes físicos separados.

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.