Правила создания быстрого кода под Delphi
Как известно, компилятор Delphi принадлежит классу оптимизирующих. Однако качественно оптимизация всё же во многом зависит от действий программиста. Чтобы компилятор создал максимально быстрый код необходимо ему в этом «помогать». Для этого имеет смысл придерживаться свода практических правил, соблюдение которых в процессе написания программ способствует генерации компилятором Delphi действительно быстрого кода.
1. Нужно воздерживаться от использования переменных для временного хранения постоянных величин. Лучше подставлять в код точные значения или представлять «магические» числа в качестве констант (const).
2. Можно безболезненно обходится без неиспользуемых объявлений и присвоений, поскольку компилятор способен их вычищать.
3. Нужно тщательно контролировать использование переменных во избежание лишних перекрёстных присвоений их значений. Подобного рода оптимизация Delphi не по силам.
4. Следует использовать только сжатые математические выражения, поскольку компилятор не умеет их упрощать.
5. Нельзя использовать конструкции вида - а:=100*sin(60*pi/180), поскольку Delphi не только ни вычислит данную константу при компиляции, несмотря на свой фундаментальный анализ кода, но и будет покорно вызывать sin и pi в процессе исполнения программы. Если допустить, что в приведенном примере угол выражен переменной, то хотя бы число пи необходимо заменить константой до нужного знака.
6. Следует помнить, что Delphi замечательно справляется с математическими выражениями, которые полностью составлены из констант, он вычисляет их на этапе компиляции.
7. Нужно крайне внимательно контролировать заданные условия и их границы. Компилятор не способен ни выявлять заведомо ложные условия, ни вычищать заведомо лишние.
8. Чтобы скомпилированный код не стал притормаживать, надо обязательно проследить, что математическое выражение, которое повторяется согласно условию несколько раз, во всех встречающихся конструкциях выражено одинаково.
9. Сообщение «Сочетание знаковых и беззнаковых типов – расширились оба операнда» информирует не только о возможной ошибке, но и о потере вследствие преобразования общей производительности. К примеру, выражение, где переменная х объявлена как ineteger при заданном условии if х>$аbсd6123 then х:= $аbсd6123, несмотря на его верность, вызовет упомянутое предупреждение. Дело в том, что полученный код станет исполнять преобразования величин вплоть до 64 бит с дальнейшим сравнением всех 64-битных операндов. Между тем изменение типа переменой х с ineteger на cardinal, позволит не только избавиться предупреждения, но оптимизировать код до трёх строк вместо восьми.
10. Если округление до большего не имеет значение, то при делении на степень двух лучше вместо nodiv 2 использовать shr 1. Связано это с тем, что Delphi справляется с оптимизацией сложения, умножения и в некоторых случаях деления. Для Delphi это так же просто, как для вебмастера установить информер на свой сайт.
11. При возможности в case of нужно использовать элементы, которые расположены в арифметической прогрессии.
12. Инвариантный код следует выносить за тело цикла, избегая при этом наиболее частой ошибки – for i:=1 to length(str) do. В противном случае при каждой очередной итерации будет выплывать функция length, что негативно скажется на общей производительности. Кроме того, длину строки желательно сразу присвоить переменной. Необходимо также избегать включения в тело цикла таких выражений, который заведомо не зависят от изменений итерационной переменной.
| 2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2002 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2001 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 2000 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 1999 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
- Компания по разработке программного обеспечения
- Услуги аутсорсинга в области программирования
- Как продлить срок службы картриджей
- Мошенничество во Всемирной Паутине. Осторожно: фишинг!
- Web-студия
- Как легально поднять уровень индекса цитирования.
- Мы реально сможем помочь вам в управлении предприятием
- Создание сайтов – популяризация вашего замысла
- Свой сайт. Управление ресурсом
- Семантическое ядро сайта или правила подбора ключевых фраз
- Программирование в среде Delphi 8 for .NET
- Практикум по Delphi для решения прикладных задач
- Фундаментальные алгоритмы и структуры данных в Delphi
- Delphi 6. Программирование на Object Pascal
- Delphi и технология COM
- Delphi в шутку и всерьез: что умеют хакеры
- Программирование в Delphi глазами хакера
- Delphi 2005. Секреты программирования
- Искусство создания компонентов Delphi
- Приемы программирования в Delphi на основе VCL
- Программирование баз данных в Delphi 7
- Программирование баз данных в Delphi
- Программирование в среде Delphi
- Программирование в Delphi 7
- Язык SQL в Delphi 5