Интернет магазин китайских планшетных компьютеров



Компьютеры - Сборка мусора - Проблемы ручного управления памятью

23 января 2011


Оглавление:
1. Сборка мусора
2. Проблемы ручного управления памятью
3. Механизм сборки мусора
4. Требования к языку и системе
5. Проблемы использования
6. Достоинства и недостатки
7. Управление памятью в конкретных языках и системах



Традиционным для директивных языков способом управления памятью является ручной. Его сущность в следующем:

  • Для создания объекта в динамической памяти программист явно вызывает команду выделения памяти. Эта команда возвращает указатель на выделенную область памяти, который сохраняется и используется для доступа к ней.
  • До тех пор, пока созданный объект нужен для работы программы, программа обращается к нему через ранее сохранённый указатель.
  • Когда надобность в объекте проходит, программист явно вызывает команду освобождения памяти, передавая ей указатель на удаляемый объект.

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

Висячая ссылка
Висячая ссылка — это оставшаяся в использовании ссылка на объект, который уже удалён. После удаления объекта все сохранившиеся в программе ссылки на него становятся «висячими». Память, занимаемая ранее объектом, может быть передана операционной системе и стать недоступной, или быть использована для размещения нового объекта в той же программе. В первом случае попытка обратиться по «повисшей» ссылке приведёт к срабатыванию механизма защиты памяти и аварийной остановке программы, а во втором — к непредсказуемым последствиям.
Появление висячих ссылок обычно становится следствием неправильной оценки времени жизни объекта: программист вызывает команду удаления объекта до того, как его использование прекратится.
Утечка памяти
Создав объект в динамической памяти, программист может не удалить его после завершения использования. Если ссылающейся на объект переменной будет присвоено новое значение и на объект нет других ссылок, он становится программно недоступным, но продолжает занимать память, поскольку команда его удаления не вызывалась. Такая ситуация и называется утечкой памяти.
Если объекты, ссылки на которые теряются, создаются в программе постоянно, то утечка памяти проявляется в постепенном увеличении объёма используемой памяти; если программа работает долго, объём используемой ею памяти постоянно растёт и через какое-то время ощутимо замедляется работа системы, либо программа исчерпывает доступный объем адресного пространства и завершается с ошибкой.


Просмотров: 6119


<<< Подсчёт ссылок
Слабая ссылка >>>