Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_k_gosam (1).doc
Скачиваний:
8
Добавлен:
01.04.2025
Размер:
4.61 Mб
Скачать

18. Распределение памяти под объекты программы. Статическая и динамическая память.

Статические и динамические объекты программ

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

Другие свойства и связи изменяются в процессе исполнения области действия. Их называют динамическими. Например, конкретное значение переменной - динамическое свойство. Связь формального параметра с конкретным фактическим в результате вызова процедуры -динамическая связь. Размер конкретного массива с переменными границами - динамическое свойство.

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

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

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

19. Списковые динамические структуры. Стеки. Деки. Очереди. Бинарные деревья.

Динамическая структура данных характеризуется следующими свойствами:

Непостоянством и непредсказуемостью размера (от 0 и далее);

Отсутствием физической смежности элементов структуры в памяти (отсю-да вытекает сложность доступа к элементам структуры).

Динамические структуры представляются списковыми структурами. Спи-ском называется линейно-упорядоченная последовательность элементов данных Е(1), Е(2), ..., Е(п), где п>>0, причем каждый элемент характеризует¬ся одним и тем же набором полей. Определенный таким образом список называют также линейным спи-ском вследствие линейной упорядоченности его элементов. Упорядоченность элемен-тов спи¬ска может задаваться неявно путем последовательного располо¬жения его эле-ментов как в логической структуре, так и в па¬мяти машины. Такой список будем на-зывать последовательным. С другой стороны, упорядоченность элементов может за-даваться с помощью специальных указателей, располагаемых в элементах и дающих возможность для каждого элемента определить его предшественника или последова-теля. Такая структура называется динамически связанным списком и широко исполь-зуется в информатике.

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

Примеры полустатических структур - очередь, стек.

Стеки.

СТЕК ( синонимы - магазин, очередь LIFO-Last In First Out ) - последователь-ный список переменной длины, включение и исключение элементов из которого про-изводится только с одной стороны.

Дескриптор стека, реализованного на основе односвязного линейного спи-ска, содержит: имя стека S, указатель стека PS (наиболее удобен адрес нижнего эле-мента), адрес верхней границы AUB, текущее количество элементов в стеке K, описа-ние отдельного элемента.

Главные операции при работе со стеком - включение и исключение элемента - осуществляются с вершины стека, причем в каждый момент доступен элемент, нахо-дящийся на вершине стека.

Операция включения элемента с адресом N в стек.

IF K= 0 THEN AUB:= N;

F(N):= PS;

PS:= N;

K:= K+1;

Операция исключения элемента из стека (с пополнением списка свободных элементов).

IF K<>0

THEN

BEGIN

P:= F(PS);

F(PS):= E; { пополнение списка свободных

E:= PS; элементов }

PS:= P;

K:= K-1

END

ELSE; { стек пуст }

Операция очистки стека.

F(PS):= E;

E:= PS;

PS:= nil;

K:= 0;

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

Включение и исключение элемента осуществляются с вершины стека и досту-пен для работы лишь верхний элемент.

Операция очистки стека реализуется установкой адреса вершины стека

вне стека ( ниже нижней границы ):

PS := ALB - l

Операция определения количества элементов в стеке ( проверки его

объема ):

n := ( PS - ALB )/ l + 1

ОЧЕРЕДЬ - последовательный список переменной длины, в котором включе-ние элементов производится с одного конца списка ( с хвоста ), а исключение элемен-тов - с другого ( из головы ). Очередь работает по принципу FIFO - First In First Out. Для хвоста и головы очереди используются два указателя PIN и POUT.

При моделировании простейшей ЛИНЕЙНОЙ ОЧЕРЕДИ на основе вектора выделяется последовательность m мест длиной l каждое под элементы очереди.

При включении элемента в очередь он располагается в соответствии с указате-лем PIN, после чего этот указатель перемещается на следующее "пустое" место (в простейшем случае увеличиваясь на 1 или l). В процессе исключения из очереди из-влекается элемент, адресуемый посредством указателя POUT (если POUT<>PIN, что характеризует непустую очередь), а указатель также увеличивается на 1 или l. Теку-щая длина очереди K равна (PIN-POUT)/l, а при очистке очереди (в ее исходном со-стоянии) устанавливается PIN = Q1, POUT = Q1. Независимо от состояния POUT в момент попытки включения элемента при PIN = Qm+l наступает переполнение ли-нейной очереди. Чтобы устранить этот недостаток, после каждого чтения из очереди или, эффективнее, в момент PIN = Qm+l производят "сдвиг" всех наличных элементов очереди к ее голове с соответствующей коррекцией указателей. В этой ситуации пере-полнение возникает только при попытке включения элемента в очередь, где все m мест уже заполнены. Такое решение проблемы, однако, невыгодно из-за временных затрат на последовательные сдвиги элементов.

Более эффективна организация КОЛЬЦЕВОЙ ОЧЕРЕДИ, в которой при попыт-ке включения элемента в очередь, когда PIN = Qm+l, производится коррекция

PIN := Q1, если POUT > Q1.

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

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

Исходное состояние дескриптора очереди: POUT=nil, PIN=nil, K=0. Описание операции занесения элемента с адресом N в очередь:

IF K=0 THEN POUT:=N ELSE F(PIN):=N;

PIN:=N;

F(PIN):=nil;

K:=K+1;

Описание операции исключения элемента из очереди

IF K<>0 { если очередь не пуста }

THEN

BEGIN

P:=F(POUT);

F(POUT):=E; { пополнение списка свободных элементов }

E:=POUT; { на один элемент }

POUT:=P;

K:=K-1;

IF K=0 THEN PIN:=nil;

END

ELSE ; { отказ по исключению - очередь пуста }

Описание операции очистки очереди

F(PIN):=E; { пополнение списка свободных элементов }

E:=POUT; { на текущее количество элементов }

PIN:=nil;

POUT:=nil;

K:=0;

Особым типом списка является дек.

ДЕК - (от англ. deque - double-ended queue, т.е. очередь с двумя концами) - это такой последовательный список, в котором как включение, так и исключение элементов может осуществляться с любого из двух кон-цов списка. Логическая и физическая структуры дека аналогичны логической и физи-ческой структурам обычной очереди. Однако применительно к деку целесообразно вместо хвоста и головы говорить о левом конце и правом конце. Операции включения и исключения элементов из дека представляют собой обобщение аналогичных опера-ций, применяемых к очереди.

Бинарные деревья

Бинарное (двоичное) дерево (binary tree) - это упорядоченное дерево, каждая вершина которого имеет не более двух поддеревьев, причем для каждого узла выполняется правило: в левом поддереве содержатся только ключи, имеющие значения, меньшие, чем значение данного узла, а в правом поддереве содержатся только ключи, имеющие значения, большие, чем значение данного узла. Бинарное дерево является рекурсивной структурой, поскольку каждое его поддерево само является бинарным деревом и, следовательно, каждый его узел в свою очередь является корнем дерева. Узел дерева, не имеющий потомков, называется листом. Схематичное изображение бинарного дерева:

Бинарные деревья классифицируются по нескольким признакам. Введем понятия степени узла и степени дерева. Степенью узла в дереве называется количество дуг, которое из него выходит.

Другим важным признаком структурной классификации бинарных деревьев является строгость бинарного дерева. Строго бинарное дерево состоит только из узлов, имеющих степень два или степень ноль. Нестрого бинарное дерево содержит узлы со степенью равной одному. Бинарные деревья достаточно просто могут быть представлены в виде списков или массивов. Списочное представление бинарных деревьев основано на элементах, соответствующих узлам дерева. Каждый элемент имеет поле данных и два поля указателей. Один указатель используется для связывания элемента с правым потомком, а другой √ с левым. Листья имеют пустые указатели потомков. При таком способе представления дерева обязательно следует сохранять указатель на узел, являющийся корнем дерева. Главным недостатком рассмотренного способа представления бинарного дерева является то, что структура данных является статической. Размер массива выбирается исходя из максимально возможного количества уровней бинарного дерева. Причем чем менее полным является дерево, тем менее рационально используется память.

Архитектура ЭВМ и систем

    1. Организация функционирования машины Тьюринга.

    2. Организация функционирования машины фон Неймана.

    3. Обобщенная архитектура первых отечественных компьютеров.

    4. Конструкция персонального компьютера.

    5. Микропроцессор и его структурное представление. Основные характеристики.

    6. Система команд микропроцессора. Прерывания.

    7. Основная память. Состав, принципы организации ОЗУ и ПЗУ.

    8. Системный и периферийный интерфейсы. Способы обмена данными в интерфейсах. Прямой доступ к памяти.

    9. Системные и локальные шины.

    10. Внешние запоминающие устройства.

    11. Системы отображения информации. Мониторы. Принтеры.

    12. Системы мультимедиа.

    13. Мейнфреймы и суперкомпьютеры.

    14. Организация функционирования компьютеров с магистральной архитектурой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]