用来处理比较大的 case 值的时候也未 尝不可.但估计这部分的时间复杂度也不小. 好了..到了这一步,我们基本弄清楚了 switch 的实现方法.再去测试 switch 和 if 的执行时间 已经没意义了,原因如下: 1:测不准,除非能进入无 OS 环境下(真无聊到极点的时候我会把它丢进 ARM 版去测的) 2:switch 的实现和编译器有关,不同的编译器对其优化是不一样的 3:在启动了跳转表后,switch 的时间复杂度在不同的执行路径上都一样,而 IF 和具体环境有关. 想做出公平的效率评估很难. 总结一下,显然 switch 的速度是以牺牲内存空间为代价的,在启用跳转表的情况下,其效 率是 if 不可比拟的.但是所带来的额外内存支出也是不容忽视的.优化器在其中起到了仲裁作 用,很多具体的规则决定了 switch 如何实现能获得最高的性价比.程序员在实际编程中,也需 要考虑到 switch 和 if 的内部差异,明确自己是需要时间还是空间,从事实时系统程序的开发和 内核级别开发的程序员需要特别关注此问题. 遗留下来的问题: 00401A50 mov cl,byte ptr (00401ade)[edx] 为啥用 cl , cl 只能保存 0 – 255 ,难道 case 超过 256 个编辑器就崩溃了?或者说会自动改用 cx ? 这又引出下一个问题了,mov cl 比 mov cx 快多少???谁有空去测测…-_-“ 后记: 终于写完了,很乱,十分的乱 重新整理了一遍发现又学到了很多东西,思维也更加严谨了 希望能对谁谁谁有所帮助吧.. 研究 switch 和 if 研究了一天…我都觉得自己脑子有毛病了 最后一句话:优化器很强,很暴力!!! 声明:文本由轻清的风版权所有,转载请注明出处.