# Pilhas na alocação de memória
> [!NOTE] Pilhas na alocação de memória
> A pilha é uma região de memória usada para **alocação de memória estática**. Ela opera no princípio **Último a Entrar, Primeiro a Sair (LIFO)**, muito parecido com uma pilha de pratos onde você adiciona e remove pratos do topo.
**:: Referência ::** [Stack vs Heap Memory Allocation | GeeksforGeeks](https://www.geeksforgeeks.org/stack-vs-heap-memory-allocation/)
# Notas
- **Alocação:** A memória é alocada e desalocada automaticamente pelo compilador. Quando uma função é chamada, um "quadro de pilha" é empurrado para a pilha. Este quadro contém variáveis locais, argumentos de função e o endereço de retorno. Quando a função é concluída, seu quadro de pilha é removido. Este processo é chamado de **empurrar para a pilha** e **remover da pilha**.
- **Velocidade:** Empurrar e remover da pilha é muito rápido porque o alocador de memória nunca precisa procurar um lugar para armazenar novos dados; o local está sempre no topo.
- **Tamanho:** A pilha tem um tamanho conhecido, fixo e relativamente pequeno (tipicamente alguns megabytes). Todos os dados armazenados na pilha devem ter um tamanho conhecido e fixo em tempo de compilação.
- **Tempo de Vida:** Variáveis na pilha têm um tempo de vida limitado e automático. Elas são destruídas assim que a função à qual pertencem retorna. Isso também é conhecido como **alocação de memória temporária**.
- **Conteúdo:** Armazena principalmente variáveis locais, parâmetros de função e endereços de retorno.
- **Segurança:** É geralmente considerado **thread-safe** porque os dados armazenados na pilha só podem ser acessados pelo thread proprietário.
- **Problema Comum:** Se muitas chamadas de função ou muitos dados excederem a capacidade da pilha, isso resulta em um **erro de estouro de pilha**.
**:: Referência ::** [Stack vs Heap Memory Allocation | GeeksforGeeks](https://www.geeksforgeeks.org/stack-vs-heap-memory-allocation/)