Prévia do material em texto
Algoritmos e Programação II Prof. Dr. Rafael dos Passos Canteri Módulo 2 - Memória e manipulação de listas Unidade 1 - Gerenciamento de memória Gerenciamento de Memória Fonte: Pexels O que é gerenciamento de memória? ● Gerenciamento de memória é o processo de: ○ alocar, ○ usar e ○ liberar espaço na memória principal do computador durante a execução de programas. Por que é importante? ● Desempenho. ● Gestão de recursos. ● Evitar vazamentos de memória. Arquitetura de memória em Python ● O Python usa memória heap privada para armazenar objetos e estruturas de dados. ● O gerenciador de memória lida com a alocação e a liberação. ○ Dependente do interpretador (CPython é o mais comum). Tipagem dinâmica e memória ● Variáveis em Python são referências a objetos, não contêineres. Tipagem dinâmica e memória Recurso Python Outras (C, Java, Pascal) Significado de variável Um nome que aponta para um objeto na memória. Um pedaço de memória (de tipo e tamanho fixos) que contém um valor. Ligação de tipo Dinâmico - inferido em tempo de execução. Estático - declarado em tempo de compilação. Reatribuição Só atualiza o nome para apontar para outro objeto. Sobrescreve o valor na posição de memória. Alocação sequencial de memória ● Os dados são armazenados em posições contíguas na memória. ● Exemplo clássico: vetores ou arrays. ● O acesso por índice é rápido (O(1)), porque a posição do elemento pode ser calculada diretamente. ● Porém, redimensionar exige cópia para outra área da memória, o que pode ser custoso. Alocação encadeada de memória ● Os elementos (nós) são armazenados em endereços dispersos na memória, cada um com ponteiro para o próximo. ● Exemplo clássico: listas encadeadas (linked lists). ● Excelente para inserções/remoções em qualquer ponto, sem precisar mover os outros elementos. ● Mas o acesso por índice é lento (O(n)), pois exige percorrer nó a nó. Alocação dinâmica de memória ● Python ○ Automática. ○ Usa contador de referências + coleta de lixo. ○ Mutar um objeto afeta todas as referências a ele. ● C/C++ ○ Manual. ○ Precisa ser alocada e desalocada explicitamente. ○ Mutabilidade depende do tipo de valor e se é passado por referência/valor. Contagem de referências ● Mecanismo principal para gerenciamento automático de memória no CPython. ● Cada objeto tem uma contagem de referências. ● Quando ela cai para zero, a memória é desalocada. Problemas de Memória ● Vazamento de memória. ● Ocorre quando o programa mantém referências a objetos que não são mais utilizados. ● Causas comuns: ○ Manter referências desnecessariamente; ○ Uso de variáveis globais; ○ Closures e referências circulares. Coleta de Lixo ● Em Inglês (Garbage Collector). ● Lida com referências cíclicas, onde a contagem de referências falha. ● Utiliza coleta de lixo geracional: ○ Objetos novos coletados com mais frequência. ○ Objetos velhos com menos frequência. Ferramentas de gerência de memória Ferramenta Utilidade sys.getsizeof() Verifica o tamanho em bytes de um objeto. gc (módulo interno) Acessa e controla o coletor de lixo. tracemalloc Rastreia alocação de memória e identifica vazamentos. memory_profiler Mede o consumo linha a linha de scripts Python. objgraph Visualiza objetos e referências entre eles. Recapitulação ● Entender como a alocação de memória funciona é essencial para um programador. ● Python automatiza o gerenciamento de memória, mas entendê-lo ajuda a escrever melhores códigos. ● É importante saber quando intervir e como monitorar o uso da memória. Referências AGUILAR, Luis J. Fundamentos de programação. 3. ed. Porto Alegre: AMGH, 2008. ISBN 9788580550146. Disponível na Biblioteca Digital da UFMS. PEXELS. Pexels. [S.d.]. Disponível em: https://link.ufms.br/2U2Qr. Acesso em: 15 jun. 2025. SZWARCFITER, Jayme L.; MARKENZON, Lilian. Estruturas de dados e seus algoritmos. 3. ed. Rio de Janeiro: LTC, 2010. ISBN 9788521629955. Disponível na Biblioteca Digital da UFMS. VANTOL, Alexander. Memory Management in Python. Disponível em: https://link.ufms.br/TYG4W. Acesso em: 02 jun. 2025. https://link.ufms.br/2U2Qr https://link.ufms.br/TYG4W Licenciamento Respeitadas as formas de citação formal de autores de acordo com as normas da ABNT NBR 6023 (2018), a não ser que esteja indicado de outra forma, todo material desta apresentação está licenciado sob uma Licença Creative Commons - Atribuição 4.0 Internacional. https://creativecommons.org/licenses/by/4.0/ https://creativecommons.org/licenses/by/4.0/