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

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

ЛЕКЦИЯ 3. Выполнение данной процедуры для конкретного графа проиллюстрировано на следующем рисунке.

Читайте также:
  1. Амплитудная селекция
  2. Беседа как метод обучения детей дошкольного возраста диалогической речи (лекция).
  3. Вводная лекция
  4. Вопрос 1.Лекция.
  5. Воскресная лекция Шрилы Радханатхи Свами в Киеве о Бхакти Тиртхе Свами
  6. Временная селекция
  7. Вступительная лекция.
  8. Вступительная лекция.
  9. Дәріс (лекция), зертханалық және зертханалық сабақтар жоспары
  10. Дәріс (лекция), практикалық және зертханалық сабақтар жоспары

Выполнение данной процедуры для конкретного графа проиллюстрировано на следующем рисунке.

 

Штрихованными линиями показан порядок маркировки узлов.

Недостаток этого алгоритма – использова­ние значительного объема памяти для стека, поддерживающего рекурсию. Шорром и Уэйтом был разработан процесс маркировки, не требующий до­полнительной стековой памяти. Их метод основывается на перестановке указателей в об­ратном порядке при прохождении связных структур. В таком случае при достижении конца списка процесс может проследовать обратно за указателями к выходу.

Наиболее серьезную проблему, связанную со сборкой мусора, можно сформулировать следующим образом: когда она необходима, она работает хуже всего. Этот процесс актуален, когда программе действительно требуется большинство ячеек динамической памяти. В этом случае сборка мусора занимает значительное время, по­скольку нужно просмотреть большинство ячеек и пометить их как полезные. Однако в этом же случае процессу доступно только небольшое число ячеек, которые можно по­местить в список доступной памяти. Кроме того, существуют еще и затраты на дополни­тельную память для меток ячеек (для которых требуется всего по одному биту), при этом процесс сборки мусора включается во время выполнения программы. Однако эти про­блемы не являются критическими. Во-первых, в большинстве современных компьютеров объем памяти значителен; во-вторых, все профессиональные компьютеры используют виртуальную па­мять, что еще больше увеличивает доступный объем.

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

Управление динамической памятью с ячейками переменно­го размера сопряжено с теми же трудностями, и кроме этого возникают дополнительные проблемы. Именно ячейки переменного размера требуются в большинстве языков программиро­вания. Дополнительные проблемы зависят от метода управления динамической памятью. При использовании сборки мусора их можно сформулировать следующим образом.

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

· Процесс маркировки ячеек нетривиален. Как пройти цепочку, начавшуюся с указателя, если заранее не определено место расположения указателя в целевой ячейке? Другой проблемой являются ячейки, не содержащие указателей. Можно ввести системные указатели для каждой ячейки, но они должны под­держиваться параллельно с пользовательскими указателями. Этот подход снижает эффективность с точки зрения памяти и времени для выполне­ния программы.

· Нетривиально поддерживается список доступной памяти. Вначале этот список может состоять из одной ячейки, содержащей всю доступную память. Запросы на сегменты уменьшают размер этого блока. Освобожденные ячейки добавляются в список. Проблема заключается в том, что список пре­вращается в перечень блоков переменной длины. Это замедляет процесс размещения переменных в памяти, поскольку в ответ на запрос выполняется поиск блока достаточного размера. По прошествии некоторого вре­мени список может состоять из большого числа очень маленьких блоков, недоста­точных для удовлетворения большинства запросов. В этот момент может потре­боваться объединение смежных блоков в блоки больших размеров. В качестве аль­тернативы возможно использование первого достаточно большого блока в списке, что сократит поиск, но потребует упорядочения списка по размерам блока. В любом случае нужны дополнительные расходы на поддержание списка.

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

4.11. Резюме

 

Стиль и использование языка программирования во многом определяется его типами данных, которые вместе с управляющими структурами формируют ядро языка. В число элементарных типов многих языков входят числовые, символьные и булевские типы. Числовые типы данных достаточно часто поддерживаются непосредст­венно аппаратным обеспечением.

Определяемые пользователем перечислимые и ограниченные типы удобны, а их ис­пользование повышает читабельность и надежность программ.

Другой компонентой большинства языков программирования являются массивы. Связь ме­жду ссылкой на элемент массива и адресом этого элемента в памяти описывается функцией доступа, которая представляет собой реализацию отображения. Массивы мо­гут быть статическими (как в языке FORTRAN 77); фиксированными автоматическими (как в процедурах Pascal); автоматическими (как в блоках языка Ada) или динами­ческими (в массивах ALLOCATABLE языка FORTRAN 90). В большинстве языков существует лишь ограниченное число операций с массивами как единым целым.

В синтаксис современных языков вошли записи. Поля записей задаются разнообразными способами. Например, в языках COBOL и PL/I ссылаться на них можно без указания всех префиксов, но реализация этой возможности беспорядоч­на, и читабельность программ при этом ухудшается. В таких объектно-ориентированных языках программирования как Java и C# записи поддерживаются объектно-ориентированной конструкцией.

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

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

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

Управление динамической памятью без опасностей, характерных для указателей, обеспечивают ссылки подобные ссылкам в языках Java и C#.

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

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

ЛЕКЦИЯ 3




Дата добавления: 2014-12-19; просмотров: 27 | Поможем написать вашу работу | Нарушение авторских прав




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