Мне кажется, что вы очень смущены всем этим. Давайте рассмотрим некоторые из этих мифов, которые вы вытащили.
Кастинг медленный по сравнению с обычными заданиями.
Это действительно зависит от того, что вы кастуете. Между разными типами адресов нет; там на самом деле free , так как вы просто применяете другую интерпретацию к одному и тому же значению. Приведение между различными значениями числового типа может быть немного медленнее (а иногда выполняется неявно при назначении), но все еще очень быстро.
Медленные вызовы функций.
Не совсем. Они не бесплатны, но их стоимость недостаточно высока, чтобы их избегать , если только у вас нет данных профилирования, которые говорят об обратном. Никогда не оптимизируйте без очень веской причины, чтобы сделать и доказательство того, что это поможет. (К сведению, мне известно, что я пытался отменить попытки оптимизации, которые не имели необходимого мне баланса производительности).
Двоичные операции выполняются быстрее, чем обычные операции.
Что такое «нормальная работа»? FWIW, сложение является бинарной операцией. Как и умножение. На современном оборудовании они оба довольно быстрые. Позвольте компилятору беспокоиться об этом. Гораздо важнее сосредоточиться на описании того, что вы делаете правильно.
Теперь, для вещей, которые действительно стоят :
- I / O.
- Распределение памяти.
- Память копий.
- Глубоко вложенные (или очень длинные) циклы.
Не спускайте с них глаз; там, где программное обеспечение обычно работает медленно. И всегда выбирайте хорошие алгоритмы и структуры данных.