Во-первых, я бы случайно приостановил несколько раз, чтобы убедиться, что на эту диспетчеризацию потрачено достаточно времени, чтобы даже потратить его на оптимизацию.
Во-вторых, если это так, так каккаждая ветвь тратит очень мало циклов, вам нужна таблица переходов, чтобы добраться до нужной ветки.Причина существования операторов switch
состоит в том, чтобы предложить компилятору, что он может сгенерировать единицу, если значения переключателей компактны.
Как долго список значений переключателей?Если оно короткое, то if-лестница все еще может быть быстрее, особенно если вы поместите наиболее часто используемые коды вверху.Альтернативой лестнице if (которую я никогда не видел) - это if-дерево, эквивалент кода двоичного дерева.
Возможно, вам не нужен массив указателей на функции.Да, это ссылка на массив для получения указателя на функцию, но при вызове функции есть несколько накладных расходов, и похоже, что это может сокрушить небольшое количество, которое делается внутри каждой функции.
В любом случае, поискна языке ассемблера, или пошаговое выполнение инструкций, даст вам хорошее представление о его эффективности.