if elseif vs. switch

It may be, as Coding Badly suggests, that switch-case gets compiled as a lookup table with jump offsets. That could explain the larger code, but I would much rather see this fixed in the code generator, than having to rewrite my code.

The comment below is from the Arduino bootloader source.

      /* A bunch of if...else if... gives smaller code than switch...case ! */

Then what is the nature of the larger code? Is it a fixed overhead for every switch-case statement or is a shared library segment used to handle the lookups? Is the difference significant for a small, large (how large) number of case entries?