Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что быстрее: if else или switch / 11 сообщений из 11, страница 1 из 1
20.10.2016, 19:14
    #39331010
ukugyul552465
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что быстрее: if else или switch
Есть такая ситуация, что необходима проверка на значение перменной.
Что будет быстрее работать - 50 конструкций if else или switch?
Подозреваю, что switch.
...
Рейтинг: 0 / 0
20.10.2016, 19:40
    #39331031
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что быстрее: if else или switch
switch(), обсуждали как-то и асм смотрели. Топик не нашел, но суть в том что switch() преобразуется в goto arr[value] чему есть соответствующая ASM-команда.
...
Рейтинг: 0 / 0
21.10.2016, 00:02
    #39331124
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что быстрее: if else или switch
Dima Tswitch() преобразуется в goto arr[value]Это если значения в case-ах идут последовательно:
Код: plaintext
1.
2.
3.
4.
5.
6.
switch (value) {
case 4: ... break;
case 5: ... break;
case 6: ... break;
case 7: ... break;
}

Тут да, оптимизирующий компилятор скорее всего сгенерирует jump table (массив указателей на код). А вот если значения в case-ах идут как попало:
Код: plaintext
1.
2.
3.
4.
5.
6.
switch (value) {
case 11: ... break;
case 13: ... break;
case 17: ... break;
case 23: ... break;
}

то тут уже вряд ли будет jump table, скорее всего компилятор «мысленно» преобразует этот switch к чему-нибудь типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
if (value < 17) {
  if (value == 11) {...}
  else if (value == 13) {...}
} else {
  if (value == 17) {...}
  else if (value == 23) {...}
}


Но в любом случае, да, switch даёт больше возможностей для оптимизации, чем цепочка if-else.
...
Рейтинг: 0 / 0
21.10.2016, 00:09
    #39331125
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что быстрее: if else или switch
Пётр Седовтут уже вряд ли будет jump table
Во-первых, из значения вычтется нижняя граница. Потом у компилятора будет выбор: делать
пачку сравнений или всё-таки массив адресов, большинство значений в котором будет занимать
ссылка на секцию defaut.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.10.2016, 00:59
    #39331133
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что быстрее: if else или switch
ukugyul552465Есть такая ситуация, что необходима проверка на значение перменной.
Что будет быстрее работать - 50 конструкций if else или switch?
Подозреваю, что switch. Это неважно. Скорее всего выбрана неверная реализация.
...
Рейтинг: 0 / 0
21.10.2016, 12:14
    #39331421
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что быстрее: if else или switch
ukugyul552465,

Всё равно.

Как то, так и это компиляторы могут превращать в бинарный поиск по вариантам.
(на сколько я знаю).

switch при большом кол-ве вариантов просто логически предпочтительнее.
Читать удобнее.

Это конечно если там сравнение с константами только.

Да, и напоминаю, что теперь можно в switch использовать строки.
...
Рейтинг: 0 / 0
21.10.2016, 16:41
    #39331775
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что быстрее: if else или switch
MasterZivДа, и напоминаю, что теперь можно в switch использовать строки.
...
Рейтинг: 0 / 0
21.10.2016, 17:03
    #39331806
ukugyul552465
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что быстрее: if else или switch
Планируется switch со строками(~50 штук, значения в них абсолютно не схожие).
Но в общем да, switch и удобнее будет.
...
Рейтинг: 0 / 0
21.10.2016, 19:42
    #39331901
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что быстрее: if else или switch
Я бы просто HashMap использовал.

Подозреваю, что если компилятор умный, он сам switch со строками сделает через hash. Но только нафига? Пары строчек (ну пусть десятка) жалко, что бы точно знать, как оно гарантированно будет выполняться

IMHO & AFAIK
...
Рейтинг: 0 / 0
22.10.2016, 01:24
    #39332036
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что быстрее: if else или switch
ukugyul552465Планируется switch со строками(~50 штук, значения в них абсолютно не схожие).
Но в общем да, switch и удобнее будет.As i said before
...
Рейтинг: 0 / 0
22.10.2016, 02:17
    #39332043
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что быстрее: if else или switch
Leonid KudryavtsevЯ бы просто HashMap использовал.

Подозреваю, что если компилятор умный, он сам switch со строками сделает через hash.
Для этого есть perfect hash.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что быстрее: if else или switch / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]