КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Стандартные функции обработки динамической памяти
С помощью стандартных процедур МАRK и RELEASE. Ввиду различия в способах реализации процедуру DISPOSE не следует использовать совместно с процедурами MARK и RELEASE. С помощью стандартной процедуры DISPOSE. Dispose (P); где P - переменная типа «указатель» (типизированный). В результате работы процедуры DISPOSE(P) участок памяти, связанный с указателем P, помечается как свободный для возможных дальнейших размещений. При этом физической чистки указателя P и связанной с ними памяти нe происходит, поэтому, даже удалив этот экземпляр записи, можно все же получить значения ее полей, однако использовать это обстоятельство не рекомендуется. 3. С помощью стандартной процедуры FRЕЕМЕM. FreeMem (P, size); где P - переменная типа «указатель», size - целочисленное выражение размера памяти в байтах для освобождения. Эта процедура помечает память размером, равным значению выражения SIZE, связанную с указателем P, как свободную (см. пример для GETMEM).
Mark (P); Release (P); где P - переменная типа «указатель»; MARK - запоминает состояние динамической области в переменной-указателе Р; RELEASE - освобождает всю динамическую память, которая выделена процедурами NEW или GETMEM после запоминания текущего значения указателя Р процедурой MARK. Обращения к MARK и RELEASE нельзя чередовать с обращениями к DISPOSE и FRЕЕМЕM ввиду различий в их реализации. В процессе выполнения программы может возникнуть необходимость наблюдения за состоянием динамической области. Цель такого наблюдения - оценка возможности очередного выделения динамической области требуемого размера. Для этих целей Турбо Паскаль предоставляет две функции (без параметров). MaxAvail - Эта функция возвращает размер в байтах наибольшего свободного в данный момент участка в динамической области. По этому размеру можно судить о том, какую наибольшую динамическую память можно выделить. MemAvail - Эта функция возвращает общее число свободных байтов динамической памяти, то есть суммируются размеры всех свободных участков и объем свободной динамической области. Тип возвращаемого значения - longint. WRITELN('Доступно', MEMAVAIL, ' байтов'); WRITELN('Наибольший свободный участок=', MAXAVAIL, 'байтов'); Это решение основано на следующем обстоятельстве. Динамическая область размещается в специально выделяемой области, которая носит название «куча» (HEAP). Куча занимает всю или часть свободной памяти, оставшейся после загрузки программы. Размер кучи можно установить с помощью директивы компилятора М: {$М <стек>, <минимум кучи>, <максимум кучи>} где <стек> - специфицирует размер сегмента стека в байтах. По умолчанию размер стека 16 384 байт, а максимальный размер стека 65 538 байт; <минимум кучи> - специфицирует минимально требуемый размер кучи в байтах; по умолчанию минимальный размер 0 байт; <максимум кучи> - специфицирует максимальное значение памяти в байтах для размещения кучи; по умолчанию оно равно 655 360 байт, что в большинстве случаев выделяет в куче всю доступную память; это значение должно быть не меньше наименьшего размера кучи. Все значения задаются в десятичной или шестнадцатеричной формах. Например, следующие две директивы эквивалентны: {$М 16384,0,655360} {$M $4000, $0, $A000} Если указанный минимальный объем памяти недоступен, то программа выполняться не будет. Управление размещением в динамической памяти осуществляет администратор кучи, являющийся одной из управляющих программ модуля System.
Дата добавления: 2015-04-24; Просмотров: 770; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |