Чаще всего лучший способ повысить производительность - это изменить свой алгоритм. Чем менее общая реализация, тем ближе вы можете добраться до металла.
Предполагая, что это было сделано ....
Если это действительно очень важный код, старайтесь избегать чтения из памяти, старайтесь избегать вычислений, которые могут быть рассчитаны заранее (хотя нет таблиц поиска, поскольку они нарушают правило № 1). Знайте, что делает ваш алгоритм, и запишите его так, чтобы компилятор знал это тоже. Проверьте сборку, чтобы убедиться в этом.
Избегайте промахов кэша. Пакетный процесс столько, сколько вы можете. Избегайте виртуальных функций и других косвенных указаний.
В конечном итоге, все измерить. Правила меняются все время. То, что раньше ускоряло код 3 года назад, теперь замедляет его. Хороший пример - «использовать двойные математические функции вместо плавающих версий». Я бы этого не понял, если бы не прочитал.
Я забыл - нет конструкторов по умолчанию, инициализирующих ваши переменные, или, если вы настаиваете, по крайней мере, создавайте конструкторы, которые этого не делают. Будьте в курсе вещей, которые не отображаются в профилях. Когда вы теряете один ненужный цикл на строку кода, ничего не будет отображаться в вашем профилировщике, но вы потеряете много циклов в целом. Опять же, знайте, что делает ваш код. Сделайте вашу основную функцию худой, а не надежной. Надежные версии могут быть вызваны при необходимости, но не всегда необходимы. Универсальность имеет свою цену - производительность одна.
Отредактировано, чтобы объяснить, почему нет инициализации по умолчанию: Много кода говорит: Vector3 bla; bla = DoSomething ();
Внедрение в конструктор - пустая трата времени. Кроме того, в этом случае потерянное время мало (вероятно, очищая вектор), однако, если ваши программисты делают это обычно, это складывается. Кроме того, многие функции создают временные (например, перегруженные операторы), которые инициализируются нулями и присваиваются сразу после этого. Скрытые потерянные циклы, которые слишком малы, чтобы увидеть всплеск в вашем профилировщике, но кровоточат по всей вашей кодовой базе. Кроме того, некоторые люди делают намного больше в конструкторах (что, очевидно, является нет-нет). Я видел выигрыш в несколько миллисекунд от неиспользуемой переменной, где конструктор оказался немного тяжелым. Как только конструктор вызывает побочные эффекты, компилятор не сможет его отключить, поэтому, если вы никогда не используете приведенный выше код, я предпочитаю либо неинициализирующий конструктор, либо, как я уже сказал,
Vector3 bla (noInit); bla = doSomething ();