русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Выделение и освобождение динамической памяти


Дата добавления: 2015-07-23; просмотров: 566; Нарушение авторских прав


 

Вся динамическая память рассматривается как сплошной массив байтов, который называется кучей. Начало кучи хранится в стандартной переменной HEAPORG, конец – в переменной HEAPEND. Текущую границу незанятой динамической памяти указывает указатель HEAPPTR.

Выделение динамической памяти происходит при помощи процедуры NEW(<указатель>). Указатель приобретает адрес, начиная с которого можно разместить данные. Для этого сразу за указателем ставится значок ^.

VAR A:^Integer; B:^Real;

Begin

New(A);

A^ := 649;

Если бы за переменной А не было значка ^, то переменной А присваивался бы адрес, по которому впоследствии будут размещены данные.

Высвобождение динамической памяти происходит при помощи процедуры DISPOSE(<указатель>); При этом значение самого указателя (адрес) не изменяется.

Попеременное обращение к процедурам NEW и DISPOSE часто приводит к образованию «дыр» в памяти. Для освобождения целого фрагмента кучи используется процедура MARK, которая запоминает текущее значение указателя HEAPPTR. Далее в любом месте программы можно освободить фрагмент кучи начиная с данного адреса и до конца динамической памяти при помощи процедуры RELEASE. Не рекомендуется, однако использовать RELEASE совместно с процедурой DISPOSE.

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

GETMEM (A, Size) – резервирование памяти,

FREEMEM (A, Size) – освобождение памяти,

где А – нетипизированный указатель,

Size – размер в байтах.

Модули

 

Модуль – это автономно компилируемая программная единица, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции) и, возможно, некоторые исполняемые операторы инициирующей части. Модули позволяют разрабатывать библиотеки прикладных программ. Программный код модулей размещается в отдельном сегменте памяти. Количество одновременно используемых модулей ограничивается лишь доступной памятью, что позволяет создавать очень крупные программы. Модуль состоит из заголовка и трех частей, каждая из которых может быть пустой.



 

UNIT <имя>;

INTERFACE

<интерфейсная часть>

IMPLEMENTATION

<исполняемая часть>

BEGIN

<инициирующая часть>

END.

 

Имя заголовка модуля должно совпадать с именем дискового файла, в который помещается исходный текст модуля. Т.е. если заголовок UNIT INFORM, то текст модуля должен находиться в файле INFORM.PAS. Имя модуля связывает его с другими модулями и с основной программой при помощи предложения USES <список модулей>.

 

Например: USES CRT, GRAPH, INFORM;

 

Предложение USES в модулях находится либо сразу за словом INTERFACE, либо за словом INMPLEMENTATION, либо и там и там.

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

Исполняемая часть содержит описание подпрограммы, объявленной в интерфейсной части. В ней могут быть объявлены локальные для модуля объекты.

Инициирующая часть завершает модуль. Она может отсутствовать вместе с начинающим ее словом BEGIN или быть пустой. Здесь размещаются операторы, которые обычно используются для подготовки работы программы.

 



<== предыдущая лекция | следующая лекция ==>
 | Компиляция модулей


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.399 сек.