On 15/03/2010 07:19, Jae Hyuk Kwak wrote: > I think that for the "speed" optimization, perfect hash way is the > best candidate after jump table if it is applicable.
It should be pointed out that your article contains a false assumption about how fast the various options are relative to each other: > For example, when we have a piece of code like this: > > if( a == 1 ) doSomething1(); > else if( a == 2 ) doSomething2(); > else if( a == 3 ) doSomething3(); > .... > else if( a == 40000 ) doSomething40000(); > > For each line, CPU, more precisely ALU, will evaluate each statement: "a == > 1", "a == 2" and so on. In other words, CPU need to calculate 40000 times > for the same value "a". This is not true unless a is a volatile variable. The compiler will evaluate a once and then compare it against the constants. > More intuitive representation for this testing can be like this: > > switch( a ) > { > case 1: doSomething1(); break; > case 2: doSomething2(); break; > case 3: doSomething3(); break; > ... > case 40000: doSomething4000(); break; > } > > This "switch statement" gives us an illusion that CPU will evaluate the > value of "a" only one time. > > According to an article on CodeGuru, however, "switch" statement will be > replaced by "else if" It may, but in this case, the result is even better; the compiler will only ever evaluate "a" once even if it *is* volatile. cheers, DaveK