|
Адреса и указатели
Оперативная память ПК
представляет собой совокупность элементарных ячеек для
хранения информации - байтов, каждый из которых имеет
собственный номер. Эти номера называются адресами, они
позволяют обращаться к любому байту памяти.
Турбо Паскаль предоставляет в распоряжение
программиста гибкое средство управления динамической
памятью - так называемые указатели. Указатель - это
переменная, которая в качестве своего значения содержит
адрес байта памяти.
В ПК адреса задаются совокупностью двух
шестнадцатиразрядных слов, которые называются сегментом
и смещением. Сегмент - это участок памяти, имеющий длину
65536 байт (64 Кбайт) и начинающийся с физического адреса,
кратного 16 (т.е. О, 16, 32, 48 и т.д.). Смещение
указывает, сколько байт от начала сегмента необходимо
пропустить, чтобы обратиться к нужному адресу.
Адресное пространство ПК составляет
1 Мбайт (речь идет о так называемой стандартной памяти
ПК; на современных компьютерах с процессорами 80386
и выше адресное пространство составляет 4 Гбайт, однако
в Турбо Паскале нет средств, поддерживающих работу с
дополнительной памятью; при использовании среды Borland
Pascal with Objects 7.0 такая возможность имеется).
Для адресации в пределах 1 Мбайта нужно 20 двоичных
разрядов, которые получаются из двух шестнадцатиразрядных
слов (сегмента и смещения) следующим образом (рис.6.1):
содержимое сегмента смещается влево на 4 разряда, освободившиеся
правые разряды заполняются нулями, результат складывается
с содержимым смещения.

Puc.6.1. Схема
формирования адреса в ПК
Фрагмент памяти в 16 байт называется
параграфом, поэтому можно сказать, что сегмент адресует
память с точностью до параграфа, а смещение - с точностью
до байта. Каждому сегменту соответствует непрерывная
и отдельно адресуемая область памяти. Сегменты могут
следовать в памяти один за другим без промежутков или
с некоторым интервалом, или, наконец, перекрывать друг
друга.
Таким образом, по своей внутренней структуре
любой указатель представляет собой совокупность двух
слов (данных типа WORD), трактуемых как сегмент и смещение.
С помощью указателей можно размещать в динамической
памяти любой из известных в Турбо Паскале типов данных.
Лишь некоторые из них (BYTE, CHAR, SHORTINT, BOOLEAN)
занимают во внутреннем представлении один байт, остальные
- несколько смежных. Поэтому на самом деле указатель
адресует лишь первый байт данных.
|