Помощь в учёбе, очень быстро...
Работаем вместе до победы

Реализация динамических структур средствами языков высокого уровня

РефератПомощь в написанииУзнать стоимостьмоей работы

В IBM PC-совместимых компьютерах память условно разделена на сегменты. Компилятор формирует сегменты кода, данных и стека, а остальная доступная программе память называется динамической, или хипом. Такие указатели называются типизированными. Можно описать указатель на любой тип данных, кроме файловых. Тип указателя на данные можно описать и непосредственно при описании переменной: Указатели… Читать ещё >

Реализация динамических структур средствами языков высокого уровня (реферат, курсовая, диплом, контрольная)

В IBM PC-совместимых компьютерах память условно разделена на сегменты. Компилятор формирует сегменты кода, данных и стека, а остальная доступная программе память называется динамической, или хипом.

Динамические переменные создаются в хипе во время выполнения программы. Обращение к ним осуществляется через указатели. С помощью указателей и динамических переменных реализуют динамические структуры данных.

Указатели

Указателем называется переменная, предназначенная для хранения адресов областей памяти. В указателе можно хранить адрес данных или программного кода. Адрес занимает четыре байта и хранится в виде двух слов, одно из которых определяет сегмент, второе — смещение.

Указатели делятся на стандартные и определяемые программистом. Величины стандартного типа pointer предназначены для хранения адресов данных произвольного типа:

var р: pointer;

Программист может определить указатель на данные или подпрограмму конкретного типа. Как и для других нестандартных типов, это делается в разделе type:

type pword = ^word; {читается как «указатель на word» }.

var pw: pword;

Такие указатели называются типизированными. Можно описать указатель на любой тип данных, кроме файловых. Тип указателя на данные можно описать и непосредственно при описании переменной:

var pw: ^word;

Для указателей определены только операции проверки на равенство и неравенство и присваивания.

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

  • 1. Любому указателю можно присвоить стандартную константу nil, которая означает, что указатель не ссылается на какую-либо конкретную ячейку памяти.
  • 2. Указатели стандартного типа pointer совместимы с указателями любого типа.
  • 3. Указателю на конкретный тип данных можно присвоить только значение указателя того же или стандартного типа.

Операция @ и функция addr позволяют получить адрес переменной:

var х: word; {переменная}.

pw: ^word; {указатель на величины типа word}.

pw:= @w; {или pw:= addr (w);}.

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

pw^:= 2; inc (pwA); writeln (pwA);

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

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

¦ addr (x): pointer — возвращает адрес х (аналогично операции @), где х — имя переменной или подпрограммы;

¦ seg (x): word — возвращает адрес сегмента для х;

¦ ofs (х): word — возвращает смещение для х;

¦ cseg: word — возвращает значение регистра сегмента кода CS;

¦ dseg: word — возвращает значение регистра сегмента данных DS;

¦ ptr (seg, ofs: word): pointer — по заданному сегменту и смещению формирует адрес типа pointer.

Показать весь текст
Заполнить форму текущей работой