引用:
RockCarry 在 2008-7-4 21:19 的发言:
而另外一些编译器,则干脆就简单的将 switch 语句编译成为与 if 语句组等同的代码。
你觉得在21世纪的今天,这种编译器还存在么?
不管怎么说,达夫设备是作为标准化对于switch的定义的一个佐证存在的。其实际意义,在于新颖的算法设计。而不是实际应用,实际上,现代编译器根本是可以自行展开这种循环的。我反编译过VC9和minGW3.4.5的代码,都进行了这种优化。
注意其现实意义,而不是本身的价值。这是我提出达夫设备的本质原因。其优化方法,自然不如直接嵌入汇编。但是直接嵌入汇编,也只不过是达夫设备汇编下的实现,其中心思想是不会改变的。
还有就是,一般编译器都会用间接跳转表的,没有哪个编译器聪明到对顺序元素使用直接跳转表,也没有哪个编译器笨到直接将switch当作连续if串——稍微有优化器的编译器都不会做这种傻事……