Указатели, динамически формируемые массивы и строки

Страницы работы

7 страниц (Word-файл)

Содержание работы

Лабораторная работа №3

Указатели

Распределение памяти

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

Размеры стэка и сегмента данных могут быть изменены при работе программы. В 16 разрядных системах максимальный размер сегмента 64 Кб. Нарушение приводит к 2 ошибками:

  • При попытке объявить слишком большой глобальный массив – «Structure too large»
  • При использовании больших локальных массивов иди глубокой рекурсии – «Stack owerfolow».

Современные 32- 64разрядные системы позволяют использовать память более рационально, снимая жёсткие ограничения.

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

Динамические переменные имеют следующие свойства:

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

Указатели, их описание:

В указателях хранятся адреса других переменных, используемых в программе

Адрес переменной – адрес первого байта, выделяемого под переменную.

Для структурных типов данных (массивов, записей), их адресом считаются адрес первого байта первого элемента. В Pascal существует возможность прямого доступа к любому байту оперативной памяти по его адресу. Для этого используются определённые в модуле System массивы: Mem, MemW, MemL, позволяющие записать/читать информацию непосредственно из ячеек памяти.

Создание и удаление динамических переменных

Существует 2 процедуры создания динамических переменных

  • New (p)  - работа с типизированными указателями
  • GetMem (p, <размер>) – нетипизированные указатели (размер задаётся в байтах).

Похожие материалы

Информация о работе