O que é alocação dinâmica de memória?
A alocação dinâmica de memória, também chamada alocação de memória baseada em heap, é um tipo de gerenciamento de memória que é fortemente contrastado pela alocação de memória estática. Na alocação dinâmica de memória, o programador informa ao computador exatamente quanta memória alocar para cada programa e quanto tempo reter a memória. Isso resolve muitos dos problemas que ocorrem na alocação de memória estática, como uso excessivo de memória e programas paralisados. Embora ele resolva muitos problemas, se o programador esquecer de pedir que a memória seja despejada, a memória dinâmica pode se tornar um problema.
Os computadores, por padrão, usam alocação de memória estática. Isso significa que a memória retém os programas quando eles são usados, mesmo se o programa não estiver mais sendo usado ou se a memória retida se tornar perigosa ou um obstáculo ao desempenho. Por exemplo, se o usuário parar de executar um programa que ocupa 2 megabytes (MB) em uma máquina de 3 MB e um segundo programa precisar de outros 2 MB, o segundo programa não funcionará. Isso ocorre porque não há memória suficiente no computador para o outro programa.
Com a alocação de memória estática, o usuário ou programador não pode especificar a quantidade de memória que deseja armazenar, nem pode dizer à memória estática que despeje a memória para liberar recursos. É por isso que usuários avançados costumam usar alocação de memória dinâmica. O programador é capaz de controlar tudo sobre a memória, incluindo quanto tempo reter nos recursos.
Por exemplo, o programador pode definir a alocação dinâmica de memória para armazenar apenas 1 MB ou menos, economizando memória suficiente do sistema para permitir a abertura de outros programas. Isso pode ser feito porque a memória estática geralmente se apega a tudo sobre o programa, enquanto a memória dinâmica permite que os programadores definam um valor mais baixo que contém alguns dados, mas não tudo. Ao mesmo tempo, a memória estática ainda será necessária e pode ser configurada neste esquema de alocação.
Um problema em potencial com a alocação dinâmica de memória - que raramente entra em jogo - é que a memória dinâmica pode se encher se o programador esquecer de definir um valor de tempo. Se nenhum valor de tempo for definido, diferentemente da memória estática que eventualmente liberará a memória, a memória dinâmica manterá as informações. Se o programa tiver um aplicativo de despejo de lixo e a maioria o fizer, ele será ativado após um certo período de tempo para limpar a memória. Ainda é uma prática recomendada definir um valor de tempo para a alocação de memória.