Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование_ответы.docx
Скачиваний:
8
Добавлен:
22.09.2019
Размер:
138.16 Кб
Скачать

16. Программирование с использованием динамической памяти. Структура оперативной памяти. Понятие указателя.

Динамические структуры – это структуры данных с изменяющимися в процессе работы программы размерами. Такие структуры можно по ходу программы создавать и удалять. Эти данные запоминаются в динамической памяти (ДП). В ДП операционной системой выделяется область (куча). Для динамических структур используются переменные типа-указатель (или указатель). Указатель содержит адрес первого байта переменной в ДП. Длина переменной определяется ее типом. Тип-указатель должен быть объявлен. Если тип объекта, на который ссылается указатель не стандартный, то его нужно объявить до применения указателя. Затем необходимо объявить указатели.

Делится динамическая память на несколько областей (зон, разделов):

1. Conventional memory – основная память; 2. UMA (Upper Memory Area) – верхняя память; 3. HMA (High Memory Area) – область верхней памяти или область верхних адресов; 4. XMS (eXtended Memory Specification) – дополнительная память; 5. EMS (Expanded Memory Specification) – расширенная память;

Указатель – носитель физического адреса в памяти величины базового типа. Указатель имеет размер в 2 слова (4 байта). Создается компилятором в статической памяти.

Указатели бывают 2 типов: нетипизированный (var p: Pointer) и типизированный ( p1:^Integer)

В ряде случаев возникает необходимость в указателе без ссылок p: nil;

Необходимо различать переменную типа указатель и переменную на которую этот указатель ссылается

V

указатель

ar p:^Integer

p

Р^

^-переменная типа Integer

Р

*

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

Два значения ссылочного типа равны, если они ссылаются на один и тот же объект или оба пустые

Каждый указатель может находиться в одном из 3 состояний:

  1. Указатель может содержать пустой адрес(=nil)

  2. Указатель содержит адрес переменной, под которую уже выделена память

  3. Указатель может находиться в неопределённом состоянии (в начале работы, когда не присвоили еще никакого значения указателю)

17. Указатели. Описание в программе. Допустимые операции.

Указатель — переменная, диапазон значений которой состоит из адресов ячеек памяти и специального значения — нулевого адреса. Значение нулевого адреса не является реальным адресом и используется только для обозначения того, что указатель в данный момент не может использоваться для обращения ни к какой ячейке памяти. Указатели предлагают метод динамического управления памятью: их можно использовать для доступа к области с динамическим размещением памяти, обычно называемой кучей, или динамической памятью. Переменные, размещаемые в куче, называются динамическими. Часто они не содержат связанных с ними идентификаторов, и ссылаться на них можно только с помощью указателей и ссылок.

Операции над указателями

Языки программирования, в которых предусмотрен тип указателей, содержат, как правило, две основные операции над ними: присваивание и разыменование. Первая из этих операций присваивает указателю некоторый адрес. Вторая служит для обращения к значению в памяти, на которое указывает указатель. Разыменование может быть явным и неявным, в большинстве современных языков программирования разыменование происходит только при явном указании.

В случае, если указатель хранит адрес какого-либо объекта, то говорят, что указатель ссылается или указывает на этот объект p.

Языки, предусматривающие использование указателей для управления динамической памятью, должны содержать оператор явного размещения переменных в памяти. В некоторых языках помимо этого оператора предусмотрен ещё и оператор явного удаления переменных из памяти. Обе эти операции часто принимают форму встроенных подпрограмм.