Существует несколько директив компилятора, которые позволяют изменять размер и скорость выполнения программы:
pragma Pack( Aggregate ); | - | Использовать минимальный размер пространства для агрегата. | |
pragma Optimize( Space / Time / Off ); | - | Выбор типа оптимизации инструкций. | |
pragma Inline( Subprogram ); pragma Inline_Always( Subprogram ); | - | Указывают на необходимость выполнения встроенной подстановки (inline) подпрограммы Subprogram. | |
pragma Discard_Names( type ); | - | Не помещать ASCII-идентификаторы в результирующий исполняемый файл. |
Директива Pack позволяет упаковывать массивы, записи и тэговые записи, что позволяет им, в результате, занимать меньшее пространство.
Например, упакованный массив переменных логического типа Boolean
приводит к тому, что каждая переменная занимает всего один бит.
Директива Pack позволяет упаковывать только структуры данных.
Следует также учесть, что не каждый самостоятельный элемент структуры данных может быть упакован.
Например, если имеется массив записей, то для того чтобы при распределении пространства использовался минимально возможный размер, понадобиться выполнить как упаковку массива, так и упаковку записи.
Также следует учитывать, что упаковка структур данных, как правило, ухудшают скорость выполнения программы.
Примером использования этой директивы компилятора для упаковки записи может служить следующее:
type CustomerProfile is
record Preferred : Boolean; Preorders_Allowed : Boolean; Sales_To_Date : Float; end record; pragma Pack( CustomerProfile ); |
Следует заметить, что GNAT способен выполнять достаточно плотную упаковку, упаковывая отдельные компоненты структур вплоть до индивидуальных битов.
Директива компилятора Optimize позволяет указать компилятору требуемый тип оптимизации инструкций: для максимально возможной скорости выполнения инструкций (Time), для использования инструкциями минимально возможного размера (Space) или без выполнения какой-либо оптимизации вообще (Off).