Я пишу очень критическую часть кода, и у меня была эта сумасшедшая идея о замене операторов case (или операторов) массивом указателей на функции.
Позвольте мне продемонстрировать; здесь идет нормальная версия:
while(statement)
{
/* 'option' changes on every iteration */
switch(option)
{
case 0: /* simple task */ break;
case 1: /* simple task */ break;
case 2: /* simple task */ break;
case 3: /* simple task */ break;
}
}
И вот версия "callback function":
void task0(void) {
/* simple task */
}
void task1(void) {
/* simple task */
}
void task2(void) {
/* simple task */
}
void task3(void) {
/* simple task */
}
void (*task[4]) (void);
task[0] = task0;
task[1] = task1;
task[2] = task2;
task[3] = task3;
while(statement)
{
/* 'option' changes on every iteration */
/* and now we call the function with 'case' number */
(*task[option]) ();
}
Итак, какая версия будет быстрее? Являются ли накладные расходы на функциональный вызов, устраняя преимущество скорости по сравнению с обычным оператором switch (или if)?
Конечно, последняя версия не так читаема, но я ищу всю скорость, которую я могу получить.
Я собираюсь сравнить это, когда создаю вещи, но если у кого-то есть ответ, я не буду беспокоиться.