Программирование игр для Windows. Советы профессионала


ТЕХНИКА ОПТИМИЗАЦИИ - часть 4


Эти функции требуют передачи им различного количества параметров: для построения точки нужно знать две координаты, а для рисования линии — целых четыре. Что же касается цвета, то он, вероятно может быть одним и тем же как для линий, так и для окружностей. Почему же не сделать, чтобы каждая функция рисовала текущим глобальным цветом? С этой целью можно задать переменную и назвать ее, например, draw_color. Если вы измените текущий цвет и сделаете сотню вызовов функции, то при этом изменить цвет достаточно будет только один раз. В результате вы сумеете избежать порядка двухсот операций обмена со стеком.

Но учтите, что применение глобальных переменных может оказаться немного похожим на употребление наркотика: чем больше его принимаешь, тем больше он нужен. Хороший программист всегда может сбалансировать использование глобальных переменных и увеличить с их помощью быстродействие программы на 5, а то и 10 процентов.

Указатели и использование псевдоимен

Эту тему условно можно назвать тактическим приемом, которым пользуются некоторые программисты, в то время как многие о нем даже и не подозревают. Например, у вас есть фрагмент такой программы:

for(t == y->stars[index].left;

t < stars[index].left + 100; t++)

{

position = point->x + point->y -point->z;

pitch = point->x * point->y * point->z;

roll-= point->ang + sin(t) * point->ang;

}

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

t1=y->stars[index].left;

x=point->x;

y=point->y;

z=point->z;

ang=point->ang;

for(t=t1;t<t1+100;t++)

{

position=x+y+z;

pitch=x*y*z;

roll=ang+sin(t)*ang;




Начало  Назад  Вперед



Книжный магазин