|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|||||||||||
Оптимизируется ли компилятором конструкция switch-case? Работа со строками через ID объекта или hash10.06.2015, 21:13. Показов 4491. Ответов 38
Метки нет (Все метки)
Добрый вечер,
1) Определён ли порядок выбора switch (согласно стандарта кажись неопределён, но все компиляторы я уверен в этом тривиальном вопросе работают в примерно одном русле) 2) какие варианты оптимизации кода
4) сработает ли какая-либо оптимизация компилятора, если в метод который заходят часто есть константный строки
0
|
|||||||||||
| 10.06.2015, 21:13 | |
|
Ответы с готовыми решениями:
38
Оптимальная конструкция switch-case-while / while-switch-case Конструкция выбора switch-case Не работает конструкция switch-case |
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
| 11.06.2015, 15:43 | |
|
0
|
|
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
| 11.06.2015, 16:27 | |
|
1
|
|
|
|
|
| 11.06.2015, 18:53 | |
Сообщение было отмечено DrOffset как решение
Решение
Кстати, код
C++ if (str == "one") { ... } else if ( str = "two") { ... } else if ( str = "three") { ... } else if ( str = "four") { ... // длинная цепочка сравнений C++ switch (str[0]) { case 'o': if (str == "one") { ... } break; case 't': if (str == "two") { ... } else if (str == "three") { ... } break; case 'f': if (str == "four") { ... } break; }
1
|
|
|
|
||||||
| 11.06.2015, 19:20 | ||||||
|
Тогда можно еще попробовать немного укорить:
0
|
||||||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 11.06.2015, 20:10 [ТС] | |
|
DrOffset, во уже что-то сладенькое. Вы это сами писали или есть где почитать про такой путь оптимизации строкового свича?
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 11.06.2015, 20:12 | |||
|
Добавлено через 1 минуту Просто раньше не было красивого способа посчитать hash от литерала в ct (см. boost::mpl::string), поэтому это не пользовалось популярностью.
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 11.06.2015, 20:26 | ||
|
Добавлено через 6 минут rikimaru2013, Ты главное не думай, что это какая-то панацея. Полно вариантов, когда это решение может оказаться хуже, например, тернарного дерева поиска. Думать всегда нужно головой и профилировать
0
|
||
|
|
|||||||
| 11.06.2015, 20:38 | |||||||
А вот потом уже: у тебя - результат, не у тебя - посимвольное сравнение оставшихся символов. Так что быстрее, код на ассемблере (который выше), или посимвольное сравнение в конце (что не в твоём коде)? Для меня далеко не очевидно что быстрее твой вариант, даже если это на самом деле так.
1
|
|||||||
|
|
||
| 11.06.2015, 20:41 | ||
|
Добавлено через 2 минуты Правда ещё надо прикинуть, сколько тактов занимает вычисление хэш-кода. Т.е. выбор между #24 и #26, думается, будет не всегда однозначный и зависит от конкретных значений строковых литералов
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 11.06.2015, 20:46 | ||||
|
Но если для тебя это дело принципа, что ты аж в ассемблер полез, доказать, что код не быстрее, пусть будет так. Мне лень спорить, если честно. На всякий случай, если ты воспринял это как попытку принизить вариант Evg или твой, то ты ошибся.
0
|
||||
|
|
|||
| 11.06.2015, 20:50 | |||
|
1
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||||
| 11.06.2015, 21:03 | |||||
|
Не по теме:
Добавлено через 3 минуты Единственное, что стоит ТС вынести из нашего разговора, так это то, что нужно думать головой, прежде чем применять тот или иной способ. Добавлено через 6 минут Так что, если ты сейчас докажешь, что на нашем наборе данных (кстати набора-то вроде нет?) этот способ хуже - я не удивлюсь. Если окажется, что они равны или он лучше - ну что ж, бывает.
0
|
|||||
|
|
|||
| 12.06.2015, 00:24 | |||
|
Добавлено через 10 минут Если строки может быть только одной из 30 и никакой другой, то в качестве хэш-функции можно попробовать подогнать что-то типа "str[0] + str[3] - str[2]". Наверняка при некоторой ловкости рук можно получить ну очень короткий вариант и он будет работать с термоядерной скоростью
1
|
|||
| 12.06.2015, 02:41 | |
|
Классические решения для мэппинга строк в индекс, это Hash и Trie.
Perfect hash function Trie MARISA: Matching Algorithm with Recursively Implemented StorAge
0
|
|
| 12.06.2015, 02:41 | |
|
Вызов метода объекта для проверки в конструкции switch-case
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Книги по геймдизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|