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


         

Средства оптимизации GNAT, используемые в исходном тексте - часть 2


Эта директива никак не воздействует на структуры данных.

pragma Optimize ( Space ); package body AccountsPayable is

Директива компилятора Inline указывает на то, что необходимо осуществлять встроенную вставку (inline) кода подпрограммы в случаях когда это возможно.

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

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

procedure Increment( X : in out Integer ) is

begin

X := X + 1; end Increment; pragma Inline( Increment );

Следует учесть, что директива встроенной вставки Inline

будет проигнорирована, если при компиляции программы не используется опция командной строки компилятора -O3.

Также следует учесть, что опция -O3

будет автоматически осуществлять встроенную вставку коротких подпрограмм.

Директива компилятора Inline_Always вызывает принудительную встроенную вставку подпрограмм, описанных в разных пакетах (подобно опции -gnatn) не зависимо от указания в командной строке компилятора опций -gnatn или -gnatN.

Директива компилятора Discard_Names позволяет освободить пространство занимаемое ASCII-строками имен идентификаторов.

Например, при наличии большого перечислимого типа, Ада обычно сохраняет строки имен для каждого идентификатора значения перечислимого типа.

Это выполняется для поддержки использования атрибута 'Img.

Если использование атрибута 'Img не планируется, то можно указать компилятору на необходимость очистки этих имен.

type Dog_Breed is (Unknown, Boxer, Shepherd, Mixed_Breed); pragma Discard_Names( Dog_Breed );

Примечательно, что при выполнении очистки имен, атрибут 'Img остается доступным.

В этом случае, вместо возвращения строкового представления имени идентификатора, атрибут 'Img будет возвращать позицию значения в списке перечисления значений перечислимого типа (например, 0, 1, 2 и так далее).




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