Memória Stack vs. Heap
Parte da seção Lógica e Fluxo do Journey de C da Coddy. Lição 31 de 63.
Quando seu programa em C é executado, ele usa duas regiões distintas da memória: a pilha e o heap. Entender a diferença entre essas áreas de memória é fundamental para programar em C com eficiência, especialmente ao trabalhar com ponteiros e alocação dinâmica de memória.
A pilha é usada para a alocação estática de memória. É nela que suas variáveis locais, parâmetros de função e informações sobre chamadas de função são armazenados. A pilha é gerenciada automaticamente pelo sistema: quando você declara uma variável local, a memória é alocada na pilha e, quando a variável sai do escopo, essa memória é liberada automaticamente.
void function() {
int x = 10; // Alocado na pilha
char arr[100]; // Também alocado na pilha
// A memória é liberada automaticamente quando a função termina
}O heap é usado para alocação dinâmica de memória. Este é um pool de memória maior que você pode solicitar durante a execução do programa.
Ao contrário da pilha, o heap exige gerenciamento manual — você deve solicitar memória explicitamente e depois liberá-la quando terminar. Isso oferece mais controle, mas também mais responsabilidade.
A principal diferença é o gerenciamento: a memória da pilha é automática e limitada em tamanho, enquanto a memória do heap é manual e muito maior. Nas próximas lições, você aprenderá a trabalhar com a memória do heap usando funções como malloc() e free().
Experimente você mesmo
Esta lição não inclui um desafio de código.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um ContatoPratique por conta própria: Compilador de C online