Вы должны сосредоточиться на создании читаемого кода, а не на «быстром» коде. Скорость достигается путем ваших алгоритмов более эффективными:
Вы получаете более высокую производительность, заменив наивные сорта с быстрой сортировкой, не заменяя (i != 0)
с (i)
.
Компилятор делает все это для вас в любом случае.
Я резюмировать со ссылкой на обновленные вопросы, перечисленные:
(1) Есть ли способ, что я могу оптимизировать код выше в дальнейшем?
Конечно, вы можете заменить (i != 0)
и (n != 0)
с (i)
и (n)
и делать все виды махинаций и придирки с кодом, чтобы сделать это только немного быстрее, но в конце концов, вы на самом деле не меняется ничего потому что ваш компилятор делает еще больше оптимизаций. Часто он может оптимизировать сборку, сгенерированную напрямую.
(2) Может ли кто-нибудь сказать мне, почему я не могу получить прибыль?
Компилятор мой друг. Даже если компилятор здесь ничего не сделал, вы не заметите прирост, если у вас нет таймера с точностью до nano-second. В конечном счете, это зависит от вашего определения L_SUBFR
.
Просто для Пинки, вот пример того, что компилятор может сделать:
unsigned int i = getValue();
if (i >= 10 && i <= 200) {
}
Это код, который кажется настолько минимален, поэтому неприводимым, может быть оптимизирована компилятором для этого:
unsigned int i = getValue();
if (i - 10 <= 190) {
}
Зачем нужна вторая версия? Кроме того, они не имеют эквивалентной функциональности – SomeWittyUsername
** Оставьте такую оптимизацию компилятору ** (предполагая, что обе версии делают то же самое, что сомнительно). Компилятор для этого намного лучше, чем вы и я вместе. –
Любой цикл, который вы можете сохранить во внутреннем цикле, полностью затухает циклами, проведенными в операторе присваивания 'y1'. Тогда цикл, который вы могли бы сохранить во внешнем цикле, * полностью * завален внутренним циклом. –