Книга: Основы объектно-ориентированного программирования
Восстановление памяти: проблемы
Восстановление памяти: проблемы
Если уйти от несерьезного подхода и его упрощающих допущений, то предстоит решить, как и когда восстанавливать память. Возникают две проблемы:
[x]. Обнаружение (detection). Как найти мертвые элементы?
[x]. Восстановление (reclamation). Как восстановить для повторного использования память, присоединенную к этим элементам?
Для каждой из этих задач можно искать решение на одном из двух возможных уровнях:
[x]. Реализации языка - компилятор и среда исполнения обеспечивают общую поддержку любому ПО, создаваемому на этом языке и в данной среде.
[x]. Приложения - приложение само решает возникающие проблемы.
В первом случае управление выделенной памятью происходит автоматически с помощью программно-аппаратных средств. Во втором случае каждый разработчик приложения должен позаботиться об этом сам.
Фактически, существует еще третий возможный уровень, нечто среднее между этими двумя, - фабрика компонентов. Функции управления памятью возлагаются на общецелевые повторно используемые классы библиотеки ОО-среды. Подобно уровню приложения, можно использовать только разрешенные конструкции языка программирования, не имея прямого доступа к аппаратуре и функциям операционной системы. Подобно уровню реализации языка, проблемы управления памятью решаются один раз и для всех приложений.
Даны две проблемы и три способа решения каждой, в итоге - шесть возможных вариантов. Только четыре из них имеют практический смысл. Рассмотрим их.
- Что происходит с объектами
- Несерьезный подход (тривиальный)
- Восстановление памяти: проблемы
- Удаление объектов, управляемое программистом
- Подход на уровне компонентов
- Автоматическое управление памятью
- Подсчет ссылок
- Сборка мусора
- Практические проблемы сборки мусора
- Среда с управлением памятью
- Ключевые концепции
- Библиографические заметки
- Упражнения
- Классы памяти
- Восстановление из резервной копии
- Восстановление с использованием инструмента gbak
- Восстановление из резервных копий многофайловых баз данных
- Восстановление из резервной копии на системе-приемнике
- Восстановление поврежденной базы данных
- Восстановление "безнадежных" баз данных. InterBase Surgeon
- 3.2.1.2. Начальное выделение памяти: malloc()
- Проблемы потребителя
- 3.5 Проблемы доступа при использовании нескольких протоколов
- 5.2 Проблемы при резервном копировании
- Восстановление элементов списка из Корзины