Я знаю, что это микро-оптимизация, поэтому спрашиваю из чистого любопытства.
Логически, микропроцессору не нужно сравнивать все биты обоих операндов оператора равенства, чтобы определить результат "FALSE".
Обратите внимание, это связано с программированием, поскольку влияет на скорость выполнения программы.
Обычно микропроцессор выполняет сравнение с помощью электрических вентилей, а не шаг за шагом. Он проверяет все биты сразу.
Это зависит от вашей платформы, но в целом, он будет выполнять одинаково.
Например, на x86, вы можете увидеть это, глядя на то, как монтажные работы. Проверьте х86 блок управления потока операций - Если вы're делая равенства или неравенства, это'ы сделано 2 операции.
Во-первых, вы делаете СМР (сравнение) операции. Затем проверьте, чтобы увидеть, если сравнение равно, не равно и т. д. Это всего лишь проверка результатов сравнения - в обоих случаях вы'повторно делать 2 операции.
Во многих языках программирования высшего уровня, однако, вещи разные. Многие языки определяют неравенство в условиях равенства - для проверки неравенства, вы делаете проверку на равенство, то вторая проверка, чтобы увидеть, если это's не ложь. Это вызывает равенства (микроскопически) быстрее на этих языках. Многие языки позволяют конкретно написать, как хорошо, но многие люди, как правило, пишут неравенство в условиях равенства, который снова делает равенство, в общем, немного быстрее.
Звучит, как вы должны прочитать процессор Intel 64 и IA-32 архитектуры оптимизация справочное руководство.
Трубопровод задержки "и" Что посмотреть там в " задержка газопровода"по; по указаниям, которые вы используете. Достаточно сказать, что все, что вы делаете с ИНЦ занимает около 1 такт для выполнения (4 миллиарда в секунду). Чтение данных из памяти может занять 100-1000 в зависимости от того, сколько данных вы работаете. Гораздо более важным.
Сравнение обычно реализуется как вычитание, при котором результат не учитывается. Сумматор в CPU будет работать со всеми битами одновременно, так что это операция с постоянным временем.
Равенство тогда просто определяет, равен ли выход 0. В x86 есть флаги, которые устанавливаются в результате сравнения, а ветвление выполняется через jz или jnz (jump if zero, jump if not zero). Так что нет, реальной разницы в скорости не будет.
Другие платформы (такие как ARM и IA64) ведут себя аналогично.
Сами инструкции будут выполняться с такой же скоростью, как и другие ответы предложили.
Где вы можете столкнуться разница будет в предсказания переходов или эффектов кэш. Это зависит от процессора к процессора и компилятора к компилятору, поэтому он'невозможно делать обобщения. Если вы находитесь на уровне, когда это может сделать разницу, единственный способ узнать-это попробовать и оценить.
Операция сравнения происходит по нарастающему (или, возможно, спадающему) фронту тактового сигнала микропроцессора. Затем следующая операция выполняется на следующем тактовом цикле. Таким образом, с точки зрения скорости выполнения, равенство и неравенство занимают одинаковое количество времени практически для каждого процессора, представленного сегодня на рынке.
Я говорю почти, потому что я помню, что читал о некоторых процессорах, которые должны были быть основаны не на тактовом сигнале, а на времени выполнения операции, так что если бы действительно операция сравнения была быстрее операции сложения, то набор из n операций сравнения занял бы меньше времени, чем n операций сложения. Но я на 99% уверен, что это был всего лишь исследовательский проект, а не коммерческий продукт :)
Есть несколько незначительных случаев, где это может иметь какой-то эффект.
На процессорах ARM (для 32-разрядной/номера-палец набор инструкций архитектуры (Иса)), все инструкции являются условными. Иногда вы можете уйти с внутреннего контура, имеющих одну ветку (от начала до конца) несмотря на несколько условий. В некоторых случаях имеющий логическое сравнение (Тэ
) то беспокоит несколько флагов (влияет отрицательно (N) и нулевой (з), но не носить (С) и переполнения (V)), в данном волосатые код, чтобы избежать ветке инструкция (заложница).
И наоборот, если не ошибаюсь (Я'ве никогда не программировал, но посмотрел на выходе компилятора C более десяти лет назад) 68000 имеет дословный ПНП/исключающее или инструкция только для регистрации Д4. Поэтому арифметическое сравнение, вероятно, будет лучше (хотя вы все еще можете игнорировать посторонние флаги -дело в том, что набор команд немного неправильный).
Как уже было сказано, плакат, большая часть действий выше с памяти, диска, сети и веб-службу задержки.
Если вы хотели поднять это на более общий вопрос, вам придется рассмотреть разумное распределение правильных и неправильных ответов, и вы должны учитывать произвольное слово длины, в том числе больше, чем реестр.
В поиске алгоритмов (сортировки и может рассматриваться как расширение поиска) чаще использовать операторы " и<" или "<=с" чем-то "==" по. Это происходит потому, что распределение результатов в "==" от оператора, как правило, очень ориентирована на "ложные" и таким образом они имеют низкий уровень энтропии (т. е. по низкой доходностью) на их выполнение. Это означает, что они должны быть выполнены несколько раз, чтобы получить ту же информацию - свидетельство линейного поиска.
В любом случае, они берут за o(длины слова) количество бит-сравнение, хотя, если слово-длина &л;= Длина регистра сравнения происходят параллельно, возможно, с небольшой задержкой для переноски-излучения. (На самом деле, как я думаю об этом, в типичном случае неравные, либо сравнение может остановить на первой неравной бит, если вероятность равенства достаточно мал, что может произойти довольно рано.)
Количество времени это берет, чтобы сделать сравнение, как это вообще один такт.
32-битный процессор сделаем все 32 бита сразу, а 64-бит сделать 64 бит сразу.
Если есть задержка, или ларек, в трубопроводе было бы, потому что операнд-это'т доступен и должна быть извлечена. Что'ы, где наибольшие накладные расходы. Но это было бы сделано в кусок соответствовать архитектуре процессора, так что еще бы'вэ были остановлены в качестве 32 - или 64-битный блок.
Один аспект все это при условии, что он'ы говорим о регистрации указания. Все правильно, это'ы в принципе спорный на уровне ЦП вещей. И даже выше самого высокого уровня операций записи неравенства как вызов отрицанием равенства.
Однако, еще выше, используя вопрошающего'ы оптимизации будет работать в обе стороны. Это равенство можно записать так эффективно, как неравенство.
Кроме того, с точки зрения людей занимающихся сборки ОПС, единственная разница между CMP и саб, какие флаги установлены. Они обычно выполняются с той же части машины, так как СМР должны вернуть флаги, которые представляют собой равенства, меньше и больше.