# Heap na alocação de memória > [!NOTE] Heap na alocação de memória O heap é uma região de memória usada para **alocação dinâmica de memória**. É menos organizado que a pilha (stack), permitindo um gerenciamento de memória mais flexível. O nome "heap" não tem relação com a estrutura de dados heap; ele simplesmente se refere a um grande pool de memória. **:: Referência ::** [Stack vs Heap Memory Allocation | GeeksforGeeks](https://www.geeksforgeeks.org/stack-vs-heap-memory-allocation/) # Notas - **Alocação:** A memória é alocada dinamicamente durante a execução do programa. Quando você coloca dados no heap, você solicita uma certa quantidade de espaço. O alocador de memória encontra um local vazio no heap que seja grande o suficiente, o marca como em uso e retorna um **ponteiro** (o endereço dessa localização). Este processo é chamado de **alocação no heap**. - **Velocidade:** Alocar espaço no heap é mais lento do que a alocação na pilha (stack) porque o alocador deve primeiro encontrar um espaço adequado e realizar a contabilidade. Acessar dados no heap também é mais lento porque você precisa seguir um ponteiro para chegar aos dados reais, o que pode levar a padrões de acesso menos amigáveis ao cache. - **Tamanho:** O heap é muito maior e mais flexível, limitado apenas pela memória física disponível do sistema. Dados com tamanho desconhecido em tempo de compilação ou um tamanho que pode mudar devem ser armazenados no heap. - **Tempo de Vida:** Variáveis no heap persistem até serem explicitamente desalocadas pelo programador (por exemplo, usando `free` em C ou `delete` em C++) ou por um **coletor de lixo** (em linguagens como Java, Python ou JavaScript). Se não forem desalocadas, isso pode levar a **vazamentos de memória** (memory leaks). - **Conteúdo:** Armazena principalmente objetos, grandes estruturas de dados e quaisquer dados cujo tamanho não é conhecido em tempo de compilação ou que precisam persistir além do escopo de uma única chamada de função. Enquanto os objetos são armazenados na memória heap, as referências a esses objetos são tipicamente armazenadas na memória stack (pilha). - **Segurança:** É **menos thread-safe** do que a memória stack (pilha) porque os dados do heap são acessíveis por múltiplas threads, aumentando o risco de corrupção de dados se não forem tratados corretamente. - **Problemas Comuns:** **Vazamentos de memória** (memória não liberada), **fragmentação** (memória se tornando espalhada em blocos pequenos e inutilizáveis), e **`OutOfMemoryError`** se o heap estiver cheio. **:: Referência ::** [Stack vs Heap Memory Allocation | GeeksforGeeks](https://www.geeksforgeeks.org/stack-vs-heap-memory-allocation/)