Несколько способов, как использование switch case может ускорить работу программы при обработке больших массивов данных:
- Замена большого switch-блока хэш-картой функций. 1 В среднем элемент в хэш-карте находится быстрее, чем при переборе списка случаев. 1
- Использование вычисляемых goto. 2 Это может снизить время выполнения программы на 30–35%. 1
- Уменьшение доли ложных предсказаний переходов. 2 Практически каждое ложное предсказание приводит к полной или почти полной перезагрузке конвейера процессора. 2 Для этого нужно собрать статистику входных параметров и смоделировать поведение BTB-таблиц, которые используются в процессорах для динамического предсказания переходов. 2
- Использование массива указателей на функции. 4 Это значительно быстрее, чем любое сравнение. 4
Также компилятор может создавать эффективный код диспетчеризации, который может включать комбинацию статических таблиц и прямого индексирования, бинарного ветвления и других техник. 4