Что быстрее
От: abibok  
Дата: 25.07.14 22:41
Оценка: :)
Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?
Re: Что быстрее
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 25.07.14 22:45
Оценка: 1 (1)
Здравствуйте, abibok, Вы писали:

A>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?


А по-моему, они одинаковые! (c)
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[2]: Что быстрее
От: abibok  
Дата: 25.07.14 22:57
Оценка:
ГВ>А по-моему, они одинаковые! (c)

Годится, а что еще? Вопрос задан на собеседовании, с вами разговаривает ваш будущий (возможно) Team Lead.
Re[3]: Что быстрее
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 25.07.14 23:01
Оценка:
Здравствуйте, abibok, Вы писали:

ГВ>>А по-моему, они одинаковые! (c)


A>Годится, а что еще? Вопрос задан на собеседовании, с вами разговаривает ваш будущий (возможно) Team Lead.


Зависит от настроения и размера куража, который меня нагонит. Может быть, скажу, что это два бесконечных цикла, а может быть — задам встречный вопрос и предложу сравнить с while(-1){...} и while(0){...}.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: Что быстрее
От: Engler Беларусь  
Дата: 25.07.14 23:06
Оценка:
A>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?

С технической точки зрения, вероятнее всего, вопрос лишен смысла.

Ну а если рассмотреть, сферический ассемблер и аппаратную базу в вауккуме, то
теоретическое битовое предсавление 1 ( 0000...1 ) можно быстрее сравнить с 0, т.е отсекаем по певому биту.
Тогда как для двойки 0000010 нужно сделать сдвиг и потом сравнить ...
Это конечно, же если у нас двоичная система ...

Ну это второе что приходит на ум, первое это "мотать как можно быстрее"
Re: Что быстрее
От: D. Petrov США  
Дата: 26.07.14 00:38
Оценка:
Здравствуйте, abibok, Вы писали:

A>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?


Если язык интерпретируемый то разницы нет, все одинаково медленно.
Если компилируемый — тоже разницы нет. Проверка условия соптимизируется на безусловный переход.
Re[3]: Что быстрее
От: kleng  
Дата: 26.07.14 00:41
Оценка: 1 (1) :)
Здравствуйте, abibok, Вы писали:

A>Годится, а что еще? Вопрос задан на собеседовании, с вами разговаривает ваш будущий (возможно) Team Lead.


Разворачиваюсь и ухожу. Не хочу работать с тимлидом-идиотом.
Re[2]: Что быстрее
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 26.07.14 00:44
Оценка: +1 :))
Здравствуйте, Engler, Вы писали:

A>>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?


E>Тогда как для двойки 0000010 нужно сделать сдвиг и потом сравнить ...


Уже не пройдешь. Очевидно, что:
1) компилятор это преобразует к while (true) еще в compile time и разницы не будет, в смысле в ассемблере там будет безусловный переход и сравнения не будет.
2) у меня есть какое-то сомнение, что для того, чтобы сделать cmp xx/j[n]z процессор что-то там сдвигает. Процессор это такой большой колебательный контур с транзисторами и контактами, схему сделать которая выполняет or всех битов из проводочков даже 10-летний ребенок сделает, уже не говоря, что там таблички для вычисления скорее всего вообще всей арифметики вшиты.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re: Что быстрее
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 26.07.14 00:45
Оценка:
Здравствуйте, abibok, Вы писали:

A>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?

Ответ по-моему очевидный, меня больше интересует, а что ответил человек на вопрос, а нахрена он это спросил?
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[4]: Что быстрее
От: abibok  
Дата: 26.07.14 00:46
Оценка: :)
K>Разворачиваюсь и ухожу. Не хочу работать с тимлидом-идиотом.

А если предположить, что тимлид не идиот?
Re[3]: Что быстрее
От: мыщъх США http://nezumi-lab.org
Дата: 26.07.14 00:55
Оценка: +1
Здравствуйте, abibok, Вы писали:

ГВ>>А по-моему, они одинаковые! (c)


A>Годится, а что еще? Вопрос задан на собеседовании, с вами разговаривает ваш будущий (возможно) Team Lead.


ну как бы копиляторы ругаются на это матом. зато не ругаются на for(;). быстрее вообще что? исправить while(x) в for(;) или вкурить с какого бодуна тут while(2) ? я вот смотрю и думаю что, возможно, тут ошибка. возможно, автор хотел сказать while(A2). вы же не можете убедить меня в обратном без анализа прилегающего к while кода? так что при чтении исходников while(2) уж точно будет не быстрее, но рискует быть медленее, т.к. многие подвиснут в поисках ошибки, которой нет.

чисто абстрактно можно вообразить сферический компилятор под кубический процессор, который не делает оптимизации и где есть команда загрузить единицу в регистр, но нет команды загрузить двойку. и вообще константу можно загрузить только из памяти специальными командами, которые очень медленные.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[3]: Что быстрее
От: мыщъх США http://nezumi-lab.org
Дата: 26.07.14 01:10
Оценка:
Здравствуйте, Anatolix, Вы писали:

A>Здравствуйте, Engler, Вы писали:


A>>>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?


E>>Тогда как для двойки 0000010 нужно сделать сдвиг и потом сравнить ...


A>Уже не пройдешь. Очевидно, что:

A>1) компилятор это преобразует к while (true) еще в compile time и разницы не будет,
а, допустим, это JIT. он пытается это распарсить. конкретно — пытается убедиться, что 1 и 2 входят в [0-9]. как он это проверяет? это можно и так и эдак, но как бы допустимо начинать с нуля. типа это ноль? нет. это один? да. конец. тогда (1) будет чуточку быстрее (2). хотя мне сложно представить настолько тупой парсер.


так же компилятор не обязан выполнять преобразование в (true) на стадии компиляции. ведь компилятор не указан. может быть, это что-то очень простое и учебное. допустим, компилятор грузит константу в регистр и сравнивает на стадии выполнения. и тут выясняется, что вообще-то способов компактного представления единицы на всяких ЦП заметно больше, чем двойки. но это предполагает оптимизацию ассемблерного представления.


кстати, я видел несколько программ синтаксической раскраски в которых сначала искалась конструкция while(0|1) и только если нифуя не найдено while(const). в этом случае while(1) попадает под эвристический сценарий оптимизации и парсится очень быстро. а вот while(2) парсится на общих основаниях, что медленно.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re: Что быстрее
От: __kot2  
Дата: 26.07.14 01:15
Оценка: +1
Здравствуйте, abibok, Вы писали:

A>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?

Я бы сказал что и то и то транслируется в jmp
Re: Что быстрее
От: ned Австралия  
Дата: 26.07.14 02:42
Оценка:
Здравствуйте, abibok, Вы писали:

A>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?


Я думаю, что троеточие (aka ellipses) приведет к ошибке компиляции в обоих случаях.
Re: Музыкальный альбом while(1<2)
От: SergeCpp Россия http://zoozahita.ru
Дата: 26.07.14 03:38
Оценка:
Здравствуйте, abibok!

A> Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?


Проверяется ваше знакомство с музновинками? while(1&lt;2)

По сути — в сети много где обсуждают.

Может хитрый компилятор определяет TRUE как x==1 или как (x&1)!=0.
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[2]: Что быстрее
От: Aртём Австралия жж
Дата: 26.07.14 03:56
Оценка:
Здравствуйте, __kot2, Вы писали:

A>>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?

__>Я бы сказал что и то и то транслируется в jmp

И/или другие команды условного перехода (je, jnz...). Это такой троллинг наверное- ребята развлекаются.
Re[4]: Что быстрее
От: uncommon Ниоткуда  
Дата: 26.07.14 04:17
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>вкурить с какого бодуна тут while(2) ?


а слабо вкурить с какого бодуна может быть while(0,0)?
Re[3]: Что быстрее
От: __kot2  
Дата: 26.07.14 04:30
Оценка:
Здравствуйте, Aртём, Вы писали:
Aё>И/или другие команды условного перехода (je, jnz...). Это такой троллинг наверное- ребята развлекаются.
while (1) однозначно кодируется в команду БЕЗусловного перехода
Re[5]: Что быстрее
От: мыщъх США http://nezumi-lab.org
Дата: 26.07.14 04:35
Оценка:
Здравствуйте, uncommon, Вы писали:

U>Здравствуйте, мыщъх, Вы писали:


М>>вкурить с какого бодуна тут while(2) ?


U>а слабо вкурить с какого бодуна может быть while(0,0)?

дык comma. равносильно 0. а вот 0,1 вернет 1. еще можно написать return 0,1; при возвращении int или char.

теперь моя очередь. без компилятора — что делает: **x++ = **y++;
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[4]: Что быстрее
От: Aртём Австралия жж
Дата: 26.07.14 05:01
Оценка: 4 (1)
Здравствуйте, __kot2, Вы писали:

__>while (1) однозначно кодируется в команду БЕЗусловного перехода



http://stackoverflow.com/questions/24848359/which-is-faster-while1-or-while2

Для GCC да.

Для MSVC:

Here is an example code generated by the compiler on my system (MS Visual Studio 2012), with optimizations turned off:

yyy:
xor eax, eax
cmp eax, 1 (or 2, depending on your code)
je xxx
jmp yyy
xxx:
...


Я к тому, что неоднозначно но даже с условным переходом проверка на равенство нулю.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.