What is the best optimizations that a compiler does to switches in general and in the D compilers?

A switch can be seen as if statements, or safer, nested if elses.

but surely the cost per case does not grow with depth in the switch? If one has a switch of N case then the last cost surely does not cost N times the cost of the first, approximately? This is the cost when implementing a switch as nested ifs.

Tables can be used to give O(1) cost, are these used in D's compilers? How are they generally implemented? Hash tables? If the switch is on an enum of small values is it optimized for a simple calculating offset table?

switch(e)
{
   case E.a:
   ...
   case E.z:
   ...
}

jmp offset + val(e)

Or, in general a map table can be used

jmp offset + map[e]


Just curious...

Reply via email to