O que acontece com meus dados na RAM depois que meu aplicativo é fechado?

2

"Considere o seguinte cenário:

  1. O usuário inicia o MyApp.
  2. O usuário fecha MyApp.
  3. O usuário inicia o SomeOtherApp.

Minha pergunta: Se SomeOtherApp também alocar memória dinamicamente, é possível que um dos buffers retornados pelo SO contenha os dados sensíveis colocados lá pela invocação (agora fechada) de MyApp?

Ou o conteúdo da RAM é tratado como parte da sandbox em que um aplicativo é executado? "

Alguém me fez essa pergunta recentemente e agora estou intrigado. O que acontece com a RAM quando o programa ou aplicativo é fechado? Quaisquer dados serão retidos por um buffer, ou haverá alguma referência aos dados na RAM mesmo depois que o programa for fechado?

A principal ressonância para essa questão está relacionada a preocupações de segurança, digamos que alguém colete dados de um servidor remoto e os exiba usando um programa personalizado. Uma vez que o programa fecha, quero ter certeza de que nada pode acessar os dados que eu estava exibindo do banco de dados remoto.

Estou mais preocupado com aplicativos em relação a iPhones e outros smartphones, mas RAM é RAM e acredito que se aplicaria à maioria dos outros campos.

    
por CaptJak 18.07.2013 / 16:32

4 respostas

1

Se você não limpar explícita ou implicitamente a memória antes de liberá-la, ela reterá os dados armazenados nela.

Quando você aloca certa quantidade de memória, ela pode ter os dados nela deixados por um processo anterior (ou outra parte do seu aplicativo). Se nenhum processo manteve essa área de memória desde a inicialização, então a área provavelmente está vazia (ou seja, contém apenas zeros).

É por isso que muitas vezes as pessoas zeram a memória que acabaram de alocar (para evitar que os dados de lixo anteriores estraguem a lógica do programa).

Em algumas estruturas, pode haver tipos de dados especiais que zerem a memória alocada após a destruição. Em tal exemplo, está o SecureString do .NET.

Dito isto, a plataforma de programação que você usa ou o gerenciador de memória dos sistemas operacionais pode decidir que o zeramento de memória sempre deve acontecer. Então, isso realmente depende do seu ambiente.

Relacionado

por 18.07.2013 / 16:45
0

A memória é simplesmente outro recurso gerenciado pelo sistema operacional. Como resultado, o comportamento do SO é o que você está interessado. Em alguns ambientes, os programas têm permissão para acessar QUALQUER parte da memória, o que significa que se MyApp não apagou o conteúdo da memória (escrevendo 0s em todos os locais da memória) ocupada) é, teoricamente, possível para SomeOtherApp acessar essa informação.

Na realidade, a maioria dos ambientes "modernos" impede esse comportamento e faz com que um programa trave (se não me engano, o Windows tem esse "recurso") ou tem um comportamento estranho. Esta é a razão pela qual os ponteiros DEVEM sempre ser inicializados para NULL ou algum valor útil.

Em suma, para responder à sua pergunta, depende .

    
por 18.07.2013 / 16:44
0

No passado, os programadores que alocavam dinamicamente a memória também precisavam "liberá-la", acompanhando de perto o programa para garantir que não houvesse vazamentos de memória que fizessem com que a memória que estava sendo usada pelo programa ficasse em torno e hog espaço muito depois que o usuário foi feito usando o programa.

Uma das funções dos sistemas operacionais modernos é gerenciar essa memória com eficiência e detectar quando há vazamentos de memória e corrigir o problema. Portanto, quando um programa é fechado por um usuário, o sistema operacional libera toda a memória usada pelo programa e permite que outros programas o acessem. Obviamente, há sempre falhas no design do computador, portanto, isso não acontece 100% do tempo, mas o usuário médio não notará.

Por que você teve que reiniciar o computador quando estava lento? Para limpar a RAM. Este princípio ainda é válido hoje, mas não é tão eficaz quanto no passado, devido às razões acima.

    
por 18.07.2013 / 17:14
0

Parece o mesmo quando um arquivo é excluído, ainda permanece e a 'área' está marcada como livre. Se for necessária alta segurança, o SO ou aplicativo apagará os dados.

    
por 25.03.2014 / 08:25