Задать вопрос
@Urukhayy

Какая проверка работает быстрее?

if(variable >= 300)
vs
if(variable > 299)

and

if(variable != 200)
vs
if(variable < 200)
  • Вопрос задан
  • 2226 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Какая проверка работает быстрее?

Которая вызывает переход, предсказанный предсказателем переходов (поскольку ветвь по которой пойдет код уйдет в конвеер)

Если в контексте PHP/Python/Ruby то разницы нету вообще, потому что поток команд формируется по мере выполнения и в итоге не особо получится что-то такое разруливать и тут вообще пофигу какое из перечисленных условий вы будете выполнять. А если говорить о java/javascript/c#/c++/etc то тут большее значение имеет то, как часто будет срабатывать одна или другая ветвь кода. Скажем если условие всегда выполняется или не выполняется, то современный процессор будет после первых двух итераций всегда угадывать какая ветвь кода будет грузиться и оверхэда вообще не будет. Не знаю как на AMD но на интеловских так же неплохо работает предсказание того, что ветви будут выполняться по переменно, один раз одна, другой раз другая.

Так что совсем не важно что будет выполняться в условии. Важно что бы это было предсказуемо, поддавалось каким-то шаблонам. И тогда это будет максимально производительно. А сама операция сравнения это одна операция. и не важно какая это будет операция. Намного важнее что бы весь поток команд который идет на выполнение был в кеше процессора.

И да, если это вообще разовое условие то можно просто забить. Это важно только в циклах.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
никакой разницы, т.к. операция математического сравнения - это одна команда процессора.
Ответ написан
Комментировать
@MilkyWay
даже на самый слабых компьютерах нет никакой разницы в скорости выполнения данных проверок
Ответ написан
Комментировать
svd71
@svd71
в интерпретаторе быстрее работают с одним символом, в компиляторе не видно разницы: на такого вида операции ставнения имеюзся ениничные команды процессора.
Ответ написан
Комментировать
@SilentFl
Все зависит от используемого компилятора, и указываемых настроек. Например, компилятор может строчку
if (v >= 200)
развернуть в
add eax, 5  //в eax - переменная v
cmp eax, 200
jl label1

а может и в
add eax, 5
jge short label1

разница - весьма ощутима: во втором варианте сразу же идет условный переход (то есть знаем что ZF предыдущей операцией уже выставлен), и он short, что тоже дает небольшой прирост скорости.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы