# Alocação de memória > [!NOTE] Alocação de memória > **Alocação de memória** refere-se ao processo pelo qual todos os programas gerenciam e utilizam a memória de um computador enquanto estão em execução. Este processo envolve: - **Reservar espaço:** Adquirir blocos de memória para armazenar dados e instruções que o programa precisa. - **Gerenciar uso:** Acompanhar quais partes da memória estão em uso e quais estão livres. - **Liberar espaço:** Liberar memória que não é mais necessária para que possa ser reutilizada por outras partes do programa ou por outros programas. Diferentes linguagens de programação lidam com a alocação de memória de várias maneiras: - Algumas linguagens usam **coleta de lixo** (garbage collection), que identifica e recupera automaticamente a memória que não está mais em uso. - Outras linguagens exigem que o programador **aloque e libere explicitamente** a memória. - Linguagens como [[Rust language|Rust]] usam um sistema de **propriedade** (ownership) com regras verificadas pelo compilador para gerenciar a memória, garantindo eficiência sem sobrecarga em tempo de execução. # Principais Diferenças Entre [[Pilhas na alocação de memória|Stack]] e [[Heap na alocação de memória|Heap]] |Parâmetro|Stack|Heap| |:--|:--|:--| |**Alocação/Desalocação**|Automática (pelo compilador)|Manual (pelo programador) ou Coletada por Lixo| |**Velocidade**|Mais Rápida|Mais Lenta| |**Tamanho**|Fixo, menor (limitado)|Flexível, maior (limitado pela memória do sistema)| |**Tempo de Vida**|Automático, ligado ao escopo da função|Manual (ou GC), persiste até ser desalocado| |**Acesso**|Direto, contíguo, amigável ao cache|Indireto (via [[Ponteiros]]), potencialmente fragmentado| |**Principal Problema**|Stack Overflow|Vazamentos de Memória, Fragmentação, OutOfMemoryError| |**Segurança**|Thread-safe (dados acessados pela thread proprietária)|Menos thread-safe (dados visíveis para todas as threads)| |**Flexibilidade**|Tamanho fixo, não flexível|Redimensionamento possível, flexível| |**Usado Para**|Variáveis locais, chamadas de função|Objetos, grandes estruturas de dados, arrays dinâmicos| # Exemplo de Alocação de Memória Stack e Heap ![](https://media.geeksforgeeks.org/wp-content/uploads/20201210222125/Untitled4-660x361.png) **:: Referência ::** [What is Ownership? - The Rust Programming Language](https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html)