Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Проверка на допустимость границ

Присваивание константы переменной и использование константы

в качестве значения параметра проверяется во время компиляции на

допустимость нахождения в заданных границах. При этом генерирует-

ся такой код, что во время выполнения таких проверок не делается.

Например, Х := 999, где Х - переменная байтового типа (Bytе),

приводит к ошибке компиляции.

Использование сдвига вместо умножения

Операция X*C, где C - константа, являющаяся степенью числа

2, приводит к генерации объектного кода, в котором используется

инструкция Shl (сдвиг влево).

Аналогично, когда размерность массива представляет собой

степень числа 2, то для вычисления индексных выражений использу-

ется инструкция Shl (а не инструкция Мul).

Автоматическое выравнивание на границу слова

По умолчанию Borland Pascal выравнивает все переменные и ти-

пизованные константы, превышающие по размеру 1 байт, на границу

машинного слова. На всех 16-разрядных процессорах семейства 80х86

выравнивание на границу слова означает более быстрое выполнение,

поскольку доступ к элементам размером в слово или четным адресам

осуществляется быстрее, чем к словам по нечетному адресу.

Выравнивание данных управляется директивой компилятора $A.

По умолчанию в состоянии {$A+} переменные и типизованные констан-

ты выравниваются указанным выше образом. В состоянии {$A-} ника-

ких действий по выравниванию не производится.

Примечание: Дальнейшие подробности приведены в Главе 2

("Директивы компилятора") "Справочного руководства програм-

миста".

Удаление неиспользуемого кода

Операторы, о которых известно, что они никогда не будут вы-

полняться, не включаются в объектный код. Данные выражения, нап-

ример, не приведут к генерации объектного кода:

if false then

statement { оператор }

while false do

statement

Эффективная компоновка

Компоновщик Borland Pascal автоматически удаляет неиспользу-

емый код (по процедурам), то есть процедуры и функции, являющиеся

частью скомпилированной программы, но к которым нет обращений, не

включаются в файл типа .EXE. Процедуры, функции, переменные и ти-

пизованные константы, участвующие в процессе компиляции, но ссыл-

ки на которые отсутствуют, удаляются из файлa .EXE. Удаление не-

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

пользуемых данных - по секциям, где эти данные описываются.

Рассмотрим следующую программу:

program SmartLink;

const

H: array[0..15] of char = '0123456789ABCDEF';

var

I,J : integer;

X,Y : real;

var

S: string[79];

var

A: array[1..10000] of integer;

procedure P1:

begin

A[1] = 1;

end;

procedure P2;

begin

I := 1;

end;

procedure P3;

begin

S := 'Borland Pascal';

P2;

end;

begin

P3;

end;

Основная программа вызывает процедуру P3, которая вызывает

процедуру P2, поэтому обе процедуры P2 и P3 включаются в файл

.EXE. Поскольку P2 ссылается на первый раздел описания перемен-

ных, а P3 ссылается на второй раздел описание переменных, пере-

менные I, J, X, Y, S также включаются в выполняемый файл. Однако

на процедуру P1 никаких ссылок нет, а включенные в выполняемый

файл процедуры не ссылаются на переменные Н и A, поэтому эти объ-

екты удаляются.

Эффективная компоновка имеет особую ценность в связи с ис-

пользованием модулей, которые реализуют библиотеки процедур и

функций. Примером такого модуля является стандартный модуль Dos,

который содержит ряд процедур и функций. При этом программа редко

использует все эти процедуры. Если она использует только одну или

две процедуры или функции, то только эти процедуры включаются в

полученный в результате код.

Соседние файлы в предмете Программирование на Pascal