ТЕХНИКА ОПТИМИЗАЦИИ ПРОГРАММ

       

первый. Удаление printf


Конечно, полностью отказываться от вывода текущего состояния программы – глупо (пользователю ведь интересно знать сколько паролей уже перебрано, и потом надо ведь как-то контролировать машину – не зависла ли?), но можно ведь отображать не каждый перебираемый пароль, а скажем, каждый шестисотый, а еще лучше – каждый шеститысячный. При этом, накладные расходы на вызов printf значительно упадут, а то и вовсе приблизятся к нулю.

Давайте перепишем фрагмент, ответственный за вывод текущего состояния следующим образом:

       static int x=0;

       // вывод текущего состояния на терминал

       if (++x>6666)

       {

              x = 0;

              printf("Current pswd : %10s [%d%%]\r",&pswd[0],progress);

       }

Листинг 12 Сокращение количества вызова функции printf

Батюшки мои! После перекомпиляции мы получаем скорость перебора свыше полутора миллионов паролей в секунду! То есть скорость программы возросла более, чем в пять раз! Программа выполняется так быстро, что "чувствительности" функции clock уже оказывается недостаточно для измерений и количество итераций приходится увеличивать раз в сто! И это, как мы убедимся в самом непосредственном будущем, еще отнюдь не предел быстродействия!



Содержание раздела