Se eu programei - sem saber - um vazamento de memória e o aplicativo é encerrado, a memória vazada é liberada?
c++
memory-leaks
Martijn Courteaux
fonte
fonte
Respostas:
Sim, um "vazamento de memória" é simplesmente memória à qual um processo não tem mais uma referência e, portanto, não pode mais ser liberado. O sistema operacional ainda mantém registro de toda a memória alocada para um processo e a liberará quando o processo terminar.
Na grande maioria dos casos, o sistema operacional irá liberar a memória - como é o caso dos "tipos" normais de Windows, Linux, Solaris, etc. No entanto, é importante notar que em ambientes especializados, como vários sistemas operacionais em tempo real, o a memória pode não ser liberada quando o programa é encerrado.
fonte
O SO que executa seu programa geralmente limpa a memória que não é liberada explicitamente e controla que não são fechados explicitamente, mas isso não é garantido pelo padrão C ++. Você pode encontrar algum dispositivo embutido que não libera vazamentos de memória.
Dito isso, o Windows e todas as distros do Linux que eu já vi liberam vazamentos de memória.
Você pode facilmente criar um grande loop de vazamentos de memória para testá-lo você mesmo. Observe o uso de RAM aumentar e feche o programa. Você verá que o uso de RAM diminui.
Outra consideração ao usar C ++ é que, se você não estiver excluindo a memória alocada no 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 acionados.
fonte
Você está executando em um sistema operacional de desktop (Windows, Linux etc.)? Nesse caso, sim, em geral o sistema irá liberar qualquer memória associada ao programa quando o programa for encerrado.
fonte
Normalmente sim. Alguns sistemas suportam coisas como blocos de memória compartilhada que não são liberados automaticamente quando um programa é encerrado. A maioria ainda mantém uma contagem de referência e a exclui quando todos os programas que a abriram fecham, 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 - embora normalmente travava por outros motivos antes de acumular o suficiente para causar um problema ...)
fonte
Pelo que eu sei, um sistema operacional moderno irá liberar essa memória assim que o programa terminar.
fonte
Depende de qual memória você vazou. Alguma memória não pode ser recuperada pelo sistema operacional. A maior parte da memória na maioria dos sistemas operacionais, no entanto, será recuperada automaticamente quando o processo for encerrado.
fonte