Это яркий пример ранней оптимизации .... ИМХО, это то, что программисты, плохо знакомые с их ремеслом, являются способом, о котором можно беспокоиться.Если вам нужно беспокоиться об этом, научитесь оценивать и профилировать свой код так, чтобы ваши заботы основывались на доказательствах, а не на предположениях.
Говоря на ваши конкретные вопросы.Во-первых, <=
не реализован как тестирование двух операций для <
и ==
отдельно в любом компиляторе C, с которым я встречался в своей карьере.И это включает в себя несколько монументально глупых компиляторов.Обратите внимание, что для целых чисел a <= 5
- это то же условие, что и a < 6
, и если целевая архитектура требует, чтобы использовался только <
, это то, что будет делать генератор кода.
Ваша вторая проблема, чтоwhile (i != 10)
может быть более эффективным, поднимает интересную проблему защитного программирования.Во-первых, нет, это не более эффективно в любой разумной целевой архитектуре.Тем не менее, это повышает вероятность того, что небольшая ошибка вызовет большую ошибку.Подумайте об этом: если какая-то строка кода в теле цикла изменила i
, скажем, сделав его больше 10, что может произойти?Сколько времени потребуется для завершения цикла, и будут ли какие-либо другие последствия ошибки?
Наконец, когда вы задаетесь вопросом о подобных вещах, часто стоит выяснить, какой код компилятора вы используете.используют на самом деле генерирует.Большинство компиляторов предоставляют механизм для этого.Для GCC узнайте о параметре -S
, который заставит его генерировать код сборки непосредственно вместо создания объектного файла.