Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документ Microsoft Office Word (2).docx
Скачиваний:
44
Добавлен:
09.02.2015
Размер:
842.69 Кб
Скачать

25. Программный модуль

Программа строится на основе программных модулей. Модуль состоит из элементов программного модуля. В модуле нет ничего, кроме инструкций препроцессора и (или) списков операторов.

Как сказано в справочном руководстве по C++, файл состоит из последовательности объявлений.

Здесь нет ничего странного: определение является частным случаем объявления (например, объявление, содержащее инициализацию).

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

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

Тело функции представляет собой блок операторов - список операторов (опять!), заключаемый в фигурные скобки

26Указатели в Паскале. Динамическая память на языке Паскаль

     В ТР  имена объектов (переменных и др.) д. б. определены до момента использования их в программе. Как отмечалось ранее, ОП персонального компьютера имеет сегментную структуру. Адрес – совокупность двух 16-ти разрядных слов - сегмента и смещения. (Например: $0060:$01А0).Сегмент - участок памяти, имеющий максимальную длину 64К (65536 байт). Начальный адрес каждого сегмента кратен 16 (т.е. 0, 16, 32, и т.д.), следовательно, два сегмента отстоят друг от друга, по крайней мере, на 16 байт. Сегменты адресуют память с точностью до параграфа. Параграф – фрагмент  памяти равный 16 байт. Смещение – линейная адресация в сегменте. Она также имеет  16-ти разрядные адреса и адресует память с точностью до байта. При этом глобальные переменные и типизированные константы размещаются в сегменте данных. Такие переменные называются статическими, а память, выделяемая компилятором для их хранения называется статической памятью.

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

Память, которая  выделяется под локальные переменные, называется сегментом стека. Она задается директивой {$M<размер памяти>}. Минимальный размер памяти 1К, максимальный 64К, по умолчанию 16к.

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

Для динамических переменных отводится динамическая память, которая имеет стековую структуру и называется «кучей» (хипом – Heap-куча). Размер хипа задается директивой {$M<размер памяти>}.

Доступ к статическим переменным осуществляется через их имена.  Доступ к динамическим переменным осуществляется через указатель на место их расположения в памяти. Многие практические задачи трудно или невозможно решить без использования динамической памяти. Например, обработки массивов больших объемов (более 65536 байт).

 

Ссылочные типы. Указатели в Паскале

Указатель – это переменная, которая содержит адрес другой переменной (байта памяти).  В ТР имеется два вида указателей: указатель на объект некоторого  типа (типизированный) и указатель, не связанный с типом.  Описание указателей.

Для объявления типизированных указателей используется значок  ^, который помещается перед соответствующим типом:

Type T  = ^T1; Var A    :T; где: T      – имя типа; T 1   - базовый тип (любой в т.ч. указатель);  ^      - указатель.  Примеры: Var  a       :byte;  {выделение памяти для переменной где хранится ее значение}  a       ;^byte; {выделение памяти для переменной где хранится ее адрес}

     Var  p1                :^integer;  p2, p3          :^real;

     Для объявления переменных не связывая их, с каким либо типом данных можно использовать указатель без типа (pointer). Var  p                :pointer;  где: pointer  -  не типизированный указатель, который  занимает в памяти 4 байт (2-байта сегмент, 2байта смещение.).