Здравствуйте, abibok, Вы писали:
A>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?
А по-моему, они одинаковые! (c)
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, abibok, Вы писали:
ГВ>>А по-моему, они одинаковые! (c)
A>Годится, а что еще? Вопрос задан на собеседовании, с вами разговаривает ваш будущий (возможно) Team Lead.
Зависит от настроения и размера куража, который меня нагонит. Может быть, скажу, что это два бесконечных цикла, а может быть — задам встречный вопрос и предложу сравнить с while(-1){...} и while(0){...}.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
A>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?
С технической точки зрения, вероятнее всего, вопрос лишен смысла.
Ну а если рассмотреть, сферический ассемблер и аппаратную базу в вауккуме, то
теоретическое битовое предсавление 1 ( 0000...1 ) можно быстрее сравнить с 0, т.е отсекаем по певому биту.
Тогда как для двойки 0000010 нужно сделать сдвиг и потом сравнить ...
Это конечно, же если у нас двоичная система ...
Ну это второе что приходит на ум, первое это "мотать как можно быстрее"
Здравствуйте, abibok, Вы писали:
A>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?
Если язык интерпретируемый то разницы нет, все одинаково медленно.
Если компилируемый — тоже разницы нет. Проверка условия соптимизируется на безусловный переход.
Здравствуйте, Engler, Вы писали:
A>>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?
E>Тогда как для двойки 0000010 нужно сделать сдвиг и потом сравнить ...
Уже не пройдешь. Очевидно, что:
1) компилятор это преобразует к while (true) еще в compile time и разницы не будет, в смысле в ассемблере там будет безусловный переход и сравнения не будет.
2) у меня есть какое-то сомнение, что для того, чтобы сделать cmp xx/j[n]z процессор что-то там сдвигает. Процессор это такой большой колебательный контур с транзисторами и контактами, схему сделать которая выполняет or всех битов из проводочков даже 10-летний ребенок сделает, уже не говоря, что там таблички для вычисления скорее всего вообще всей арифметики вшиты.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте, abibok, Вы писали:
A>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?
Ответ по-моему очевидный, меня больше интересует, а что ответил человек на вопрос, а нахрена он это спросил?
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте, 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.
Здравствуйте, 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.
Здравствуйте, abibok, Вы писали:
A>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"?
Я бы сказал что и то и то транслируется в jmp
Здравствуйте, __kot2, Вы писали:
A>>Что вы ответите на вопрос "что быстрее — while(1) {...} или while(2) {...}"? __>Я бы сказал что и то и то транслируется в jmp
И/или другие команды условного перехода (je, jnz...). Это такой троллинг наверное- ребята развлекаются.
Здравствуйте, Aртём, Вы писали: Aё>И/или другие команды условного перехода (je, jnz...). Это такой троллинг наверное- ребята развлекаются.
while (1) однозначно кодируется в команду БЕЗусловного перехода
Здравствуйте, 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.