powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что быстрее: if else или switch
11 сообщений из 11, страница 1 из 1
Что быстрее: if else или switch
    #39331010
ukugyul552465
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая ситуация, что необходима проверка на значение перменной.
Что будет быстрее работать - 50 конструкций if else или switch?
Подозреваю, что switch.
...
Рейтинг: 0 / 0
Что быстрее: if else или switch
    #39331031
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
switch(), обсуждали как-то и асм смотрели. Топик не нашел, но суть в том что switch() преобразуется в goto arr[value] чему есть соответствующая ASM-команда.
...
Рейтинг: 0 / 0
Что быстрее: if else или switch
    #39331124
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Что быстрее: if else или switch
    #39331125
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пётр Седовтут уже вряд ли будет jump table
Во-первых, из значения вычтется нижняя граница. Потом у компилятора будет выбор: делать
пачку сравнений или всё-таки массив адресов, большинство значений в котором будет занимать
ссылка на секцию defaut.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Что быстрее: if else или switch
    #39331133
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ukugyul552465Есть такая ситуация, что необходима проверка на значение перменной.
Что будет быстрее работать - 50 конструкций if else или switch?
Подозреваю, что switch. Это неважно. Скорее всего выбрана неверная реализация.
...
Рейтинг: 0 / 0
Что быстрее: if else или switch
    #39331421
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ukugyul552465,

Всё равно.

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

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

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

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

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

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

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


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