Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_po_PAYa_2-y_semestr.doc
Скачиваний:
4
Добавлен:
27.10.2018
Размер:
453.12 Кб
Скачать

Представление сложных типов. Адресная арифметика.

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

Pole Pole+i

i

Такие адреса называют относительными, число i – смещением, адрес поля – базой.

Пусть поле содержит n значений некоторого типа с длиной cSize Of T.

Pole+i*cSizeOfT

Pole j

a0 a1 a2 a3

Такое вычисление адресов лежит в основе реализации одномерных массивов. Но такие рассуждения не решают вопроса, как указать текущие значения последовательности (массива).

A[1]→A

A[2]→A+cSize Of T

A[3]→A+z*cSize Of T

A[i]-?

Решение – адресная переменная или ссылка. Запись адреса вида p^ называется в машинных языках неявной или косвенной.

Пример (трансляция): Суммирование элементов последовательности. Известно, что поле А содержит 10 числовых значений в формате длины 4.

{S:=S+p^;}

S:=0;

p:=addr(A);

i:=1;

while i<=10 do

begin

S:=S+p^;

i:=i+1;

p:=p+cSizeOfT;

end;

Реализация записи аналогична реализации массивов.

cSize Of T1 cSize Of T2

R p1 p2 p3

R+cSize Of T1+cSize Of T2+…+cSize Of Ti-1­; - указатель на i-е поле записи

Проблемы реализации ввода-вывода. Идея буферизации.

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

Кроме того, файлы имеют специфическую физическую организацию. Так, например, то, что с логической точки зрения является file of integer, физически может представлять последовательность блоков (физических записей), например, по 100 чисел в блоке.

Физическая организация. Помимо специфичных для каждого устройства особенностей, центральная проблемой ввода-вывода – существенно более низкая скорость обмена данными внешней памяти по сравнению с внутренней (оперативной). Пути решения этой проблемы за счёт распараллеливания обработки внутренних и внешних данных рассмотрим на примере стандартного Паскаля. В стандартном Паскале read и write – не операторы, но процедуры, реализованные с помощью операторов get и put. С каждым именем файла автоматически связывается переменная со стандартным именем f^, называемая буфером и имеющая для файла file of T тип T, для текстового – char. Оператор get(f) считывает очередную компоненту файла в переменную f^, put(f) записывает в файл содержимое буферной переменной.

get(f)~read(f,f^);

put(f)~write(f,f^);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]