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

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

Стандартные функции обработки динамической памяти

Читайте также:
  1. A) Постоянно находится в памяти.
  2. Cудeбныe функции князя и вeчe
  3. Double сохраняется в памяти 15-16 десятичных знаков.
  4. I. Правосознание: понятие, структура, функции и виды.
  5. I. Сущность, формы, функции исторического знания.
  6. II. Правовая культура: понятие, функции и виды.
  7. II. Функции Аппарата Правительства
  8. II. Функции школьной одежды
  9. II.2.2. Функции
  10. III. Распределение виртуальной памяти

В процессе выполнения программы может возникнуть необходимость наблюдения за состоянием динамической области. Цель такого наблюдения - оценка возможности очередного выделения динамической области требуемого размера. Для этих целей Турбо Паскаль предоставляет две функции (без параметров).

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

TYPE ZAP=RECORD

FIELD1: STRING [20];

FIELD2: REAL;

END;

VAR P: POINTER;

BEGIN

...

IF MAXAVAIL <SIZEOF(ZAP) THEN

WRITELN ('HE ХВАТАЕТ ПАМЯТИ!')

ELSE

GETMEM(Р, SIZEOF(ZAP));

...

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

...

WRITELN('Доступно', MEMAVAIL, 'байтов');

WRITELN('Наибольший свободный участок=', MAXAVAIL, 'байтов');

...

Это решение основано на следующем обстоятельстве. Динамическая область размещается в специально выделяемой области, которая носит название «куча» (HEAP). Куча занимает всю или часть свободной памяти, оставшейся после загрузки программы. Размер кучи можно установить с помощью директивы компилятора М: {$М<стек>, <минимум кучи>, <максимум кучи>}, где <стек>- определяет размер сегмента стека в байтах. По умолчанию размер стека 16 384 байт, а максимальный размер стека 65 538 байт. <минимум кучи>- определяет минимально требуемый размер кучи в байтах; по умолчанию минимальный размер 0 байт. <максимум кучи>- определяет максимальное значение памяти в байтах для размещения кучи; по умолчанию оно равно 655 360 байт, что в большинстве случаев выделяет в куче всю доступную память; это значение должно быть не меньше наименьшего размера кучи.

Все значения задаются в десятичной или шестнадцатеричной формах. Например, следующие две директивы эквивалентны:

{$М 16384,0,655360}

{$M $4000, $0, $A000}

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

Управление размещением в динамической памяти осуществляет администратор кучи, являющийся одной из управляющих программ модуля System.

Примеры работы с памятью

Рассмотрим пример размещения и освобождения разнотипных динамических переменных в куче.

TYPE ST1=STRING[7];

ST2=STRING[3];

VAR I,I1,I2,I3,I4:^INTEGER;

R^:REAL;

S1:^ST1;

S2:^ST2;

BEGIN

NEW(I);

I1^:=1;

NEW(I2);

I2^:=2;

NEW(I3);

I3^=3;


Дата добавления: 2014-12-18; просмотров: 6 | Нарушение авторских прав




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