Ада-95. Компилятор GNAT



Низкоуровневая средства работы со ссылочными типами и физическими адресами памяти


Для организации работы с динамическими данными и динамической памятью в большинстве приложений достаточно тех механизмов, которые предоставляют ссылочные типы Ады.

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

Для таких случаев Ада предусматривает стандартный набор низкоуровневых средств.

Так, в стандартном пакете System представлены:

приватный тип Address, внутреннее представление которого соответствует внутреннему представлению физического адреса памяти используемой системы.

  • константа Storage_Unit - предоставляет битовый размер минимального адресуемого элемента памяти системы

  • константа Memory_Size - максимально возможный размер памяти системы

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

    Стандарт Ады этого не требует.

    Для выполнения преобразований значений ссылочных типов в значение физического адреса и наоборот, следует использовать настраиваемый пакет System.Address_To_Access_Conversions, спецификация которого имеет следующий вид:

    generic

    type Object (<>) is limited private;

    package System.Address_To_Access_Conversions is

    type Object_Pointer is access all Object; for Object_Pointer'Size use Standard'Address_Size;

    function To_Pointer (Value : Address) return Object_Pointer; function To_Address (Value : Object_Pointer) return Address;

    end System.Address_To_Access_Conversions;

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

    Copyright (C) А.Гавва V-0.4w май 2004




    Содержание  Назад  Вперед