Оптимизация кода
Некоторые параметры компилятора, поскольку они включают в программу код проверки и обработки ошибок, влияют как на размер, так и на скорость вашего кода. Хотя такие параметры полезно ис- пользовать при разработке программы, без них вы можете получить более быстрый и компактный код.
Приведем параметры, влияющие на оптимизацию кода. Каждая ди- ректива компилятора сопровождается указанием соответствующего па- раметра компилятора. Рассмотрим использование для завершающей компиляции следующих параметров:
* Выравнивание данных на границу слова Word Align Data ({$A+}) выравнивает переменные и типизированные константы на границу слова, что дает в системах с процессорами 80x86 более быстрый доступ к памяти.
* Выключение полного вычисления булевских выражений Complete Boolean Evaluation ({$B-}) дает код, который в зависимости от установки ваших булевских выражений более быстро рабо- тает.
* При выключенной эмуляции Emulation ({$E-}) компилятор не будет выполнять компоновку с библиотекой исполняющей сис- темы, эмулирующей сопроцессор 80x87. Она должна использо- вать сопроцессор 80х87 (в случае его наличия) или стан- дартный 6-байтовый тип Real. При компиляции приложений Windows эмуляция не используется; при наличии директивы эмуляции компилятор ее игнорирует.
* Когда задана генерация кода процессора 80286 Code Generation ({$G+}), компилятор для улучшения генерации ко- да использует дополнительные инструкции процессора 80286. Скомпилированные таким образом программы не будут работать на процессорах 8088 и 8086.
* При выключенной проверке ввода-вывода I/O Checking ({$I-}) компилятор не проверяет ошибки ввода-вывода. Вызвав пре- допределенную функцию IOResult, вы можете самостоятельно проверить ошибки ввода-вывода.
* Когда выключена числовая обработка Numeric Processing ({$N-}), компилятор генерирует код, способный выполнять все операции с плавающей точкой с помощью встроенного 6-байтового типа Real. Если параметр Numeric Processing включен, ({$N+}), компилятор использует сопроцессор 80х87 или эмулирует сопроцессор с помощью программного обеспе- чения, в зависимости от наличия сопроцессора 80х87. Полу- ченный в результате код может использовать четыре дополни- тельных вещественных типа (Single, Double, Extended и Comp).
* Когда выключена проверка диапазона Stack Checking ({$R-}), компилятор не выполняет проверку на ошибки индексирования массива и присваивание значения вне диапазона.
* При выключенной проверке стека Stack Checking ({$S-}) ком- пилятор не обеспечивает достаточного пространства в стеке для каждого вызова процедуры или функции.
* Когда включена нестрогая проверка строк-переменных Relaxed String Var Checking ($V-}), компилятор не проверяет пара- метры-переменные строкового типа. Это позволяет вам пере- давать строки фактических параметров, имеющие длину, от- личную от длины, определенной для формального парамет- ра-переменной.
* При разрешении расширенного синтаксиса Extended Syntax ({$X+}) вы можете использовать вызовы функций как операто- ры, поскольку результат функциональных вызовов может отб- расываться.
Оптимизация вашего кода с помощью этих параметров имеет два преимущества. Во-первых, это делает ваш код более компактным и быстрым. Во-вторых, позволяет делать вам некоторые вещи, которые вы обычно делать не можете. Однако, все эти параметры вносят не- который риск, поэтому используйте их аккуратно, и если ваша прог- рамма начинает вести себя странно, вернитесь к исходной ситуации.