2

«Рассмотрим следующий сценарий:

  1. Пользователь запускает MyApp.
  2. Пользователь закрывает MyApp.
  3. Пользователь запускает SomeOtherApp.

Мой вопрос: если SomeOtherApp также динамически распределяет память, возможно ли, чтобы один из буферов, возвращаемых ОС, содержал конфиденциальные данные, помещенные туда при (теперь закрытом) вызове MyApp?

Или содержимое оперативной памяти рассматривается как часть песочницы, в которой запускается приложение?"

Кто-то недавно задал мне этот вопрос, и теперь я заинтригован. Что происходит с оперативной памятью после закрытия программы или приложения? Будут ли какие-либо данные храниться в буфере, или будут ли ссылки на данные в ОЗУ даже после закрытия программы?

Основной резонанс этого вопроса касается вопросов безопасности. Допустим, кто-то собирает данные с удаленного сервера и отображает их с помощью специальной программы. Как только эта программа закрывается, я хочу убедиться, что ничто не может получить доступ к данным, которые я отображал с удаленной БД.

В основном меня интересуют приложения для iPhone и других смартфонов, но оперативная память - это оперативная память, и я думаю, что она будет применяться в большинстве других областей.

4 ответа4

1

Если вы не будете явно или неявно очищать память перед ее освобождением, она сохранит данные, хранящиеся в ней.

Когда вы выделяете определенный объем памяти, он может содержать данные, которые были оставлены там предыдущим процессом (или другой частью вашего приложения). Если ни один процесс не занимал эту область памяти с момента загрузки, то эта область, скорее всего, пуста (то есть содержит только нули).

Вот почему люди часто обнуляют память, которую они только что распределили (чтобы избежать путаницы с предыдущими мусорными данными в логике их программ).

В некоторых средах могут существовать специальные типы данных, которые обнуляют выделенную память при уничтожении. На таком примере .NET SecureString.

При этом используемая программная платформа или диспетчер памяти операционных систем могут решить, что обнуление памяти всегда должно происходить. Так что это действительно зависит от вашей среды.

связанные с

0

Это выглядит так же, когда файл удален, все еще остается и «область» помечается как свободная. Если требуется высокий уровень безопасности, ОС или приложение стирает данные.

0

Память - это просто еще один ресурс, которым управляет ОС. В результате поведение ОС - это то, что вас интересует. В некоторых средах программам разрешен доступ к ЛЮБОЙ части памяти, а это означает, что если MyApp не уничтожил содержимое памяти (записав 0 во все области памяти, которые он занимал), то теоретически SomeOtherApp может получить доступ к этой информации.

В действительности, большинство "современных" сред предотвращают такое поведение и приводят к аварийному завершению работы программы (если я не ошибаюсь, в Windows есть эта "особенность") или странному поведению. По этой причине указатели ДОЛЖНЫ всегда быть инициализированы либо NULL, либо каким-либо полезным значением.

Короче говоря, чтобы ответить на ваш вопрос, это зависит.

0

Раньше программистам, которые динамически распределяли память, также нужно было "освобождать" ее, а также внимательно следить за их программой, чтобы убедиться в отсутствии утечек памяти, которые могли бы привести к тому, что память, используемая программой, просто сидела и загружалась. пространство после того, как пользователь сделал это с помощью программы.

Одной из функций современных операционных систем является эффективное управление этой памятью, обнаружение утечек памяти и устранение проблемы. Таким образом, как только программа закрывается пользователем, ОС освобождает всю память, используемую программой, и позволяет другим программам получать к ней доступ. Очевидно, что всегда есть недостатки в компьютерном дизайне, так что это не происходит 100% времени, но средний пользователь не заметит.

Почему вам пришлось перезагрузить компьютер, когда он был необычно медленным? Очистить ОЗУ. Этот принцип действует и сегодня, но не так эффективен, как в прошлом, по вышеуказанным причинам.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .