Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект_лекций.doc
Скачиваний:
18
Добавлен:
26.04.2019
Размер:
1.11 Mб
Скачать

§13. Динамическое распределение оперативной памяти эвм

Напомню:

  • информация доступная для обработки процессором ЭВМ должна быть размещена в оперативной памяти,

  • информационный объект (ИО) – фрагмент оперативной памяти ЭВМ,

  • идентификатор ИО – символьное имя ИО, используемое в языках программирования.

  • структура ИО (тип или побитная интерпретация содержимого ИО) указывается в соответствующих операторах описания идентификаторов ИО (Var, Const, Procedure).

Вывод: идентификатор (имя ИО) однозначно определяет структуру ИО.

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

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

Команда «выделить нужный объем оперативной памяти для динамической переменной» дается отдельным оператором! Если потребность в динамической переменной отпадает (расчеты проведены), то занятый динамической переменной фрагмент памяти можно освободить и использовать его для иных целей. Эта команда также дается отдельным оператором.

В остальном: области и техника использования динамических переменных ничем не отличаются от программирования статических переменных.

Синтаксис оператора описания динамических переменных:

Var И1, И2, …, Иn: ^ ТипИО;

Где Var - стандартное ключевое слово оператора,

И1, И2, …, Иn - стандартный перечень имен - идентификаторов (через стандартный разделитель – запятая),

: - стандартный разделитель оператора – двоеточее,

^ - специальный ключевой символ (тильда),

ТипИО; - название типа описываемых переменных.

Пример:

Type TT=array[1..1000] of real; {TT – название новой структуры (типа) переменных, которые образуются последовательностями из тысячи вещественных чисел стандартного типа real }

Var a, b, gg:^TT; {описание динамических переменных}

Семантика этого оператора: запомни идентификаторы a, b, gg, как имена динамических переменных типа TT!

Выделение памяти для динамической переменной Иn осуществляется операторами:

New(Иn); {семантика: выделить для динамической переменной Иn фрагмент памяти соответствующий указанному в описании типу этой переменной, т.е. 6000 байт ! }

или

GetMemory(Иn , Nбайт); {семантика: выделить для динамической переменной Иn фрагмент памяти размером Nбайт байт !}.

Освобождение памяти от динамической переменной Иn осуществляется (парными к исходным) операторами:

Dispose(Иn); {семантика: освободить память ранее отведенную для динамической переменной Иn },

или, если для отведения памяти использовался оператор GetMemory,

FreeMemory(Иn , Nбайт); {семантика: освободить память ранее отведенную для динамической переменной Иn размером Nбайт байт}.

Во всех “исполнимых” операторах Pascal названия динамической переменной должно сопровождаться символом “^” (тильда).

Пример: a[3]^:=2.5*b^[8]; {внести в третий элемент динамического массива А число 2.5 умноженное на восьмой элемент динамического массива B!}.