Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Модели ручной и автоматической утилизации динамической памяти, их сравнительная характеристика.

Читайте также:
  1. SADT- модели: назначение и синтаксис.
  2. V этап. Синтез компьютерной модели объекта.
  3. А.Бандура. Подражание и следование поведению модели.
  4. Аддитивная и мультипликативная модели временного ряда
  5. Административно-территориальное распределение власти. Модели федерализма. Достоинства и недостатки федерации.
  6. Актуальные модели немецкой модели социального рыночного хозяйства
  7. Алгоритмы компьютерного моделирования
  8. Альтернативные модели построения стратегии
  9. Амплитудно-частотная характеристика.
  10. Анализ конкурентоспособности предлагаемой модели

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

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

- модель с ручным освобождением памяти;

- модель со счетчиком ссылок;

- модель с иерархией владения;

- модель с автоматической «сборкой мусора»;

- модель с автоматической «сборкой мусора» и принудительным освобождением памяти.

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

Это наиболее распространенная модель. В распоряжении программиста есть две процедуры или два оператора, с помощью которых он может соответственно запрашивать и освобождать участки (блоки) памяти. В языке программирования Cи для этой цели служат соответственно процедуры malloc и free, а в языке C++ — операторы new и delete. Эти операторы мощнее упомянутых процедур, они позволяют создавать и уничтожать объекты в динамической памяти.

В модели с ручным освобождением памяти система не следит за наличием или отсутствием ссылок на объекты. Программист должен сам заботиться об уничтожении ненужных объектов и о возвращении их памяти системе.

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

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

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

Недостаток модели — ненадежность и подверженность ошибкам. В больших прикладных системах, где данные передаются между несколькими модулями, очень трудно поддерживать соответствие операторов delete операторам new, поэтому выделенная память может вообще никогда не освобождаться. Происходит так называемая утечка памяти: объекты уже не используются, ссылок на них уже нет, но система считает память занятой. «Утечки памяти» могут критически влиять на работоспособность программ, работающих продолжительное время (это относится к СУБД, прикладным серверам, системам управления физическими объектами и пр.).

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

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

 




Дата добавления: 2015-01-30; просмотров: 28 | Поможем написать вашу работу | Нарушение авторских прав

1 | 2 | 3 | 4 | 5 | 6 | <== 7 ==> | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав