- •Модуль
- •Структура модуля
- •Структура модуля
- •Заголовок и Интерфейсная
- •Секция реализации
- •ПРИМЕР секции реализации для модуля my_complex
- •Секция инициализации
- •Подключение модуля
- •Обращение модуля к
- •Работа с динамической памятью
- •Адреса и указатели
- •Адреса и указатели
- •Динамическая память
- •Размер «кучи»
- •Типизированный указатель
- •Нетипизированный указатель Pointer
- •Правила использования указателей
- •Пример указателей
- •Разыменование –
- •Многократное
- •Выделение и освобождение
- •Выделение и освобождение
- •Освобождение блоком
- •Освобождение памяти
- •Потеря доступа
- •Предотвращение ошибок
- •Динамические массивы
- •Большая структура
- •Переменное число
- •Динамические
- •Односвязный линейный список
- •Линейная структура
Адреса и указатели
Оперативная память ПК - совокупность элементарных ячеек для хранения информации - байтов, каждый из которых имеет собственный номер - адрес, что позволяет обращаться к любому байту памяти.
Указатель - это переменная, которая в качестве своего значения содержит адрес первого байта памяти, занимаемой данными.
Адреса и указатели
Адрес - два слова ( данных типа WORD)
Сегмент - это участок памяти, имеющий длину 65536 байт (64 Кбайт) и начинающийся с физического адреса, кратного 16 (т.е. 0, 16, 32, 48 и т.д.).
Смещение указывает, сколько байт от начала сегмента необходимо пропустить, чтобы обратиться к нужному адресу.
Адресное пространство ПК составляет 1 Мбайт (в Турбо Паскале) Для адресации в пределах 1 Мбайта нужно 20 двоичных разрядов.
Динамическая память
Вся динамическая память в Турбо Паскале рассматривается как сплошной массив байтов, который называется кучей - HEAP.
Размер «кучи»
Объем свободной кучи
Размер максимального непрерывного блока в куче
Типизированный указатель
Нетипизированный указатель Pointer
Операция взятия адреса
Правила использования указателей
любому указателю можно присвоить стандартную константу NIL, которая означает, что указатель не ссылается на какую-либо конкретную ячейку памяти;
указатели стандартного типа pointer совместимы с указателями любого типа;
указателю на конкретный тип данных можно присвоить только значение указателя того же или стандартного типа данных.
Пример указателей
Разыменование –
Многократное
разыменование
