A memory perdida é liberada quando o programa sai?

Se eu programado – sem saber – um memory leaks, e o aplicativo termina, a memory vazada é liberada?

Sim, um “memory leaks” é simplesmente a memory que um processo não tem mais referência e, portanto, não pode mais liberar. O sistema operacional ainda controla toda a memory alocada para um processo e a liberará quando esse processo terminar.

Na grande maioria dos casos, o sistema operacional libera a memory – como é o caso dos “sabores” normais do Windows, Linux, Solaris, etc. No entanto, é importante observar que em ambientes especializados, como vários sistemas operacionais em tempo real, memory não pode ser liberada quando o programa é finalizado.

O sistema operacional que executa seu programa geralmente faz a limpeza de memory que não é liberada explicitamente e manipula os que não são fechados explicitamente, mas isso não é garantido pelo padrão C ++. Você pode encontrar algum dispositivo incorporado que não libere seus vazamentos de memory.

Dito isto, o Windows e todas as distribuições de Linux que eu já vi liberam vazamentos de memory.

Você pode facilmente criar um enorme loop de vazamentos de memory para testá-lo sozinho. Assista seu uso de RAM crescer e, em seguida, feche seu programa. Você vai ver que o uso de RAM desce.


Outra consideração a ser considerada ao usar o C ++ é que, se você não estiver excluindo a memory alocada do heap, seus destruidores também não serão chamados. Às vezes você também terá outros efeitos colaterais se seus destruidores não forem chamados.

Você está executando em um sistema operacional de desktop (Windows, Linux etc.)? Se sim, em geral o sistema irá liberar qualquer memory associada ao programa quando o programa sair.

Normalmente sim. Alguns sistemas suportam coisas como blocos de memory compartilhada que não são automaticamente liberados quando um programa sai. A maioria ainda mantém uma contagem de referência e a exclui quando todos os programas que a abriram saem, mas alguns não (por exemplo, o Windows de 16 bits tinha alguns tipos de itens que permaneceriam alocados mesmo quando nada se referisse a eles) ele geralmente falha por outros motivos antes que um acúmulo suficiente seja causado por um problema …)

Depende da memory que você vazou. Algumas memorys não podem ser recuperadas pelo sistema operacional. A maior parte da memory na maioria dos sistemas operacionais será recuperada automaticamente quando o processo terminar.

Até onde eu sei, um sistema operacional moderno irá liberar essa memory assim que o programa terminar.