You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数指针数组与switch语句:哪种调用方式执行速度更快?

函数指针数组 vs switch语句:哪种调用速度更快?

两种实现方式

函数指针数组写法

typedef int (*p)();
p arr[] = {a, b, c, d};

调用方式:

arr[index]();

switch语句写法

switch(index){
    case 1:{
        a();
        break;
    }
    case 2:{
        b();
        break;
    }
    case 3:{
        c();
        break;
    }
    case 4:{
        d();
        break;
    }
}

速度对比分析

  • 函数指针数组:调用复杂度为O(1),逻辑是通过索引直接取出数组中的函数指针,再执行间接调用。但这种方式无法做内联优化——编译器没法提前确定运行时会调用哪个函数,所以必然存在函数调用的固定开销。
  • switch语句:
    • 当case值是连续的小范围整数时,现代编译器会自动把switch优化成跳转表,此时和函数指针数组的调用逻辑几乎一致,也是O(1);如果case数量极少,编译器甚至会直接把函数调用内联到代码里,彻底消除函数调用的开销,这时候速度会比函数指针数组快很多。
    • 如果case值不连续,编译器可能生成一系列条件判断(类似if-else链),此时复杂度变成O(n),速度就不如函数指针数组稳定。

总结

如果switch的case是连续的小范围值,编译器优化后的表现大概率优于函数指针数组(尤其是能内联的场景);如果case值零散不连续,函数指针数组的O(1)调用会更稳定高效。实际开发中,建议优先保证代码的可读性,再根据具体的性能测试结果做调整——现代编译器的优化能力很强,多数场景下两者的性能差距可以忽略不计。

内容的提问来源于stack exchange,提问作者limuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 02:54:37