Memória Stack vs. Heap
Parte da seção Logic & Flow do Journey de C da Coddy — lição 31 de 63.
Quando o seu programa C é executado, ele utiliza duas regiões distintas de memória: a stack e o heap. Compreender a diferença entre essas áreas de memória é crucial para uma programação em C eficaz, especialmente ao trabalhar com ponteiros e alocação dinâmica de memória.
A pilha (stack) é usada para alocação estática de memória. É aqui que suas variáveis locais, parâmetros de função e informações de chamada 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 de 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.
Diferente da stack, o heap requer gerenciamento manual - você deve solicitar memória explicitamente e liberá-la posteriormente quando terminar. Isso lhe dá mais controle, mas também mais responsabilidade.
A principal diferença é o gerenciamento: a memória stack é automática e limitada em tamanho, enquanto a memória heap é manual e muito maior. Nas próximas lições, você aprenderá como trabalhar com a memória heap usando funções como malloc() e free().
Folha de consulta
Programas em C usam duas regiões de memória distintas:
Stack: Usada para alocação estática de memória. Armazena variáveis locais, parâmetros de função e informações de chamada de função. A memória é gerenciada automaticamente - alocada quando as variáveis são declaradas e liberada quando saem do escopo.
void function() {
int x = 10; // Alocado na stack
char arr[100]; // Também alocado na stack
// A memória é liberada automaticamente quando a função termina
}Heap: Usado para alocação dinâmica de memória. Um pool maior de memória que requer gerenciamento manual - você deve solicitar e liberar memória explicitamente usando funções como malloc() e free().
Diferença principal: A memória stack é automática e de tamanho limitado, enquanto a memória heap é manual e muito maior.
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 Logic & Flow
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 Contato