我正在编写代码中非常关键的性能部分,我有一个疯狂的想法,即用函数指针数组替换 case 语句(或 if 语句)。
让我演示一下;这是正常版本:
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;
}
}
以下是“回调函数”版本:
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)语句的速度优势?
当然,后一种版本不太易读,但我正在尽力提高所有速度。
在我准备好之前,我将对此进行基准测试,但如果有人已经回答了,那我就不必麻烦了。