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

Динамические переменные

Читайте также:
  1. Автономные и неавтономные динамические системы. Свойства решений автономных динамических систем (АДС). Фазовый портрет и бифуркации.
  2. Аэродинамические сила и момент. Системы координат
  3. Аэродинамические трубы
  4. Аэродинамические трубы кратковременного действия
  5. Аэродинамические трубы постоянного действия
  6. Аэродинамические характеристики крыла
  7. Гидродинамические датчики

Динамические переменные создаются в хипе во время выполнения программы с помощью подпрограмм new или getmem. Динамические переменные не имеют собственных имен — к ним обращаются через указатели.

· Процедура new(var p: тип_указателя) выделяет в динамической памяти участок размера, достаточного для размещения переменной того типа, на который ссылается указатель p, и адрес начала этого участка заносит в этот указатель.

· Функция new(тип_указателя): pointer выделяет в динамической памяти участок размера, достаточного для размещения переменной базового типа для заданного типа указателя, и возвращает адрес начала этого участка.

new применяется для типизированных указателей.

· Процедура getmem(var p: pointer; size: word) выделяет в динамической памяти участок размером в size байт и присваивает адрес его начала указателю p. Если выделить требуемый объем памяти не удалось, программа аварийно завершается. Указатель может быть любого типа.

Пример работы с динамическими переменными.

type pword = ^word; rec = record d: word; s: string; end; var p1, p2: pword; p3: ^rec;

В разделе исполняемых операторов программы запишем операторы:

new(p1); p2:= new(pword); new(p3);

В результате выполнения процедуры new(p1) в хипе выделяется объем памяти, достаточный для размещения переменной типа word, и адрес начала этого участка памяти записывается в переменную p1. Второй оператор выполняет аналогичные действия, но используется функция new. При вызове процедуры new с параметром p3 в динамической памяти будет выделено количество байтов, достаточное для размещения записи типа rec.

Доступ к выделенным областям осуществляется с помощью операции разадресации:

p1^:= 2; p2^:= 4; p3^.d:= p1^; p3^.s:= 'Вася';

В этих операторах в выделенную память заносятся значения.

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

inc(p1^); p2^:= p1^ + p3^.d;with p3^ do writeln (d, s);

Для освобождения динамической памяти используются процедуры Dispose и Freemem, причем, если память выделялась с помощью new, следует применять Dispose, в противном случае — Freemem.

· Процедура Dispose(var p: pointer) освобождает участок памяти, выделенный для размещения динамической переменной процедурой или функцией New, и значение указателя p становится неопределенным.

· Процедура Freemem (var p: pointer; size: word) освобождает участок памяти размером size, начиная с адреса, находящегося в p. Значение указателя становится неопределенным.

Если требуется освободить память из-под нескольких переменных одновременно, можно применять процедуры Mark и Release.

· Процедура Mark(var p: pointer) записывает в указатель p адрес начала участка свободной динамической памяти на момент ее вызова.

· Процедура Release(var p: pointer) освобождает участок динамической памяти, начиная с адреса, записанного в указатель p процедурой Mark.

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

При работе с динамической памятью часто применяются вспомогательные функции Maxavail, Memavail и Sizeof.


Дата добавления: 2015-08-13; просмотров: 75 | Нарушение авторских прав


Читайте в этой же книге: Строки. | Описание одномерных массивов. | Поиск элементов, удовлетворяющих заданному условию. | Алгоритм быстрой сортировки. | Многомерные массивы. | Длина строки. | Параметры-значения и параметры-переменные. | Устройства LРT1, LРT2, LРT3. | Ввод строки. | Цветовая шкала |
<== предыдущая страница | следующая страница ==>
Вывод численных значений| Адреса и указатели

mybiblioteka.su - 2015-2024 год. (0.006 сек.)