Программирование на C++ глазами хакера



ЗАКОН № 5


Нужно знать "внутренности" компьютера и принципы его работы. Чем лучше вы знаете, каким образом компьютер будет выполнять ваш код, тем лучше вы сможете его оптимизировать.

Этот закон относится только к программированию. Тут трудно привести полный набор готовых решений, но некоторые приемы я постараюсь описать.

  • Старайтесь поменьше использовать вычисления с плавающей запятой. Любые операции с целыми числами выполняются в несколько раз быстрее.
  • Операции умножения и тем более деления так же выполняются достаточно долго. Если вам нужно умножить какое-то число на 3, то для про­цессора будет легче три раза сложить одно и то же число, чем выполнить умножение.

    А как же тогда экономить на делении? Вот тут нужно знать математику. У процессора есть такая операция, как сдвиг. Вы должны знать, что про­цессор думает в двоичной системе, и числа в компьютере хранятся именно в ней. Например, число 198 для процессора будет выглядеть как 11000110. Теперь посмотрим, как работают операции сдвига.

    Сдвиг вправо — если сдвинуть число 11000110 вправо на одну позицию, то последняя цифра исчезнет и останется только 01100011. Теперь введите это число в калькулятор и переведите его в десятичную систему. Ваш результат должен быть 99. Как видите — это ровно половина числа 198.

    Вывод: при сдвиге числа вправо на одну позицию вы делите его на 2.

    Сдвиг влево — возьмем то же самое число 11000110. Если сдвинуть его влево на одну позицию, то с правой стороны освободится место, которое заполняется нулем — 1 10001100. Теперь переведите это число в десятич­ную систему. Должно получится 396. Что оно вам напоминает? Это 198, умноженное на 2.

    Вывод: при сдвиге числа влево вы умножаете его на 2.

    Так что используйте сдвиги везде, где возможно, потому что эти операции работают в несколько раз быстрее умножения и деления (и даже сложения и вычитания).

  • При создании функций (процедур) не обременяйте их большим количеством входных параметров. Перед каждым вызовом функции (процедуры) ее параметры прячутся в стек, а после выхода извлекаются оттуда. Чем больше параметров, тем значительнее расходы на общение со стеком.




    Содержание  Назад  Вперед