Gerenciamento de Memória
Estratégias de Alocação de Memória
Alocação Baseada em Pilha
void alocaçãoPilha() {
char bufferLocal[50]; // Gerenciamento automático de memória
strcpy(bufferLocal, "Exemplo LabEx");
}
Alocação Baseada em Heap
void alocaçãoHeap() {
char* bufferDinâmico = new char[100];
strcpy(bufferDinâmico, "Alocação Dinâmica de Memória");
delete[] bufferDinâmico; // Limpeza crítica de memória
}
Comparação de Gerenciamento de Memória
| Tipo de Alocação |
Duração |
Flexibilidade |
Desempenho |
| Pilha |
Automática |
Limitada |
Rápido |
| Heap |
Manual |
Flexível |
Mais lento |
Técnicas de Segurança de Memória
1. Verificação de Limites
void cópiaSegura(char* dest, const char* src, size_t tamanhoDest) {
strncpy(dest, src, tamanhoDest - 1);
dest[tamanhoDest - 1] = '\0';
}
Ciclo de Vida da Memória
stateDiagram-v2
[*] --> Alocação
Alocação --> Inicialização
Inicialização --> Uso
Uso --> Desalocação
Desalocação --> [*]
Riscos Comuns de Memória
- Estouro de Buffer
- Vazamentos de Memória
- Ponteiros Pendentes
- Memória Não Inicializada
Gerenciamento Avançado de Memória
Abordagem de Ponteiros Inteligentes
#include <memory>
void gerenciamentoMemóriaInteligente() {
std::unique_ptr<char[]> buffer(new char[100]);
strcpy(buffer.get(), "Gerenciamento Automático de Memória");
}
Estratégias de Otimização de Memória
flowchart TD
A[Otimização de Memória]
A --> B[Minimizar Alocação]
A --> C[Usar Pilha Quando Possível]
A --> D[Empregar Ponteiros Inteligentes]
A --> E[Evitar Cópias Desnecessárias]
Considerações de Desempenho
- Prefira alocação em pilha para buffers pequenos
- Utilize alocação dinâmica para dados de tamanho variável
- Sempre libere memória alocada dinamicamente
- Considere o uso de contêineres da biblioteca padrão
Tratamento de Erros
void tratamentoMemóriaRobusto() {
try {
char* buffer = new char[TAMANHO_BUFFER_GRANDE];
// Operações de memória
delete[] buffer;
} catch (std::bad_alloc& e) {
std::cerr << "Falha na alocação de memória" << std::endl;
}
}
Boas Práticas
- Utilize os princípios RAII
- Aproveite as técnicas modernas de gerenciamento de memória C++
- Prefira contêineres da biblioteca padrão
- Implemente verificação cuidadosa de limites