Оптимизация кода программ (Code Tuning)

  • При умножении и делении на 2,4,8,… пользуйте shl и shr.
inc(x);  {x:=x+1;}
 
inc(x,N);  {x:=x+N;}
 
x:=x shr 1;  {x:=x div 2;}
 
x:=x shl 1;  {x:=x * 2;}

Примечание: Только для целых чисел!

  • При сравнении вместо
(x >= 'A') and (x <= 'Z')

используйте

x in ['A'..'Z']

(Также можно делать и с числами (точнее байтами), но только от 0 до 255)

IF ch IN ['0'..'9','A'..'Z','a'..'z','_'] THEN ...

лучше заменить на

CASE ch OF
	  '0'..'9','A'..'Z','a'..'z','_':...;
	END;
  • При работе с множествами операторы
Include(S, X) и Exclude(S, X)

работают быстрее, чем

S := S + [X] и S := S - [X]

соответственно (где S - множество какого-то типа, а X - элемент множества)

  • Превычисления:
c := (a + b) * d;
e := g - (a + b);

В этих выражениях 2 раза вычисляется a+b, поэтому стоит завести временную переменную,

temp := a + b;
c := temp * d;
e := g - temp;
  • Пользуйтесь простыми арифметическими операциями начиная по уровню быстроты:
  1. присваивание
  2. сложение,вычитание
  3. умножение
  4. деление
  5. возведение в степень и др.
  • Деление заменяй на умножение:
x:=(a+b)/2;

а надо

x:=(a+b)*0.5;
  • Если X и Y целые, то такой код:
    round­(x/y)

    чаще всего заменяется на более быстрый:

    x div y
  • Пишите действительные константы с точкой (10.0 вместо 10). Это предотвращает лишние преобразования.
  • Заменяйте тип real на тип single или double.
  • I/O может быть улучшен, если используются большие буферы (кратные 512 байтам для оптимальных результатов)

Но помните, «Premature optimization is the root of all evil» (Donald Knuth)

 
pascal/code_optimization.txt · Последние изменения: 2006/05/10 14:05 (внешнее изменение)
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki