эффективный оператор switch при использовании перечислений
У меня есть перечисление и оператор switch, использующие некоторые из записей перечисления, но не все, и они в настоящее время тоже не в порядке, т. е. у меня есть следующее:
enum prot_tun_stat_e    {
    STAT_A = 0,     
    STAT_B,     
    STAT_C, 
    STAT_D,
    STAT_E,
    STAT_F, //5
    STAT_G,
    STAT_H,
    STAT_I,
    STAT_Y,
    STAT_K,     //10
    STAT_COUNT      //must be last
} __attribute__((packed));
И затем у меня есть переключатель, использующий следующие записи:
switch(var) {
case C:
break;
case D:
break
case F:
break
case G:
break
default
}
И я подумал, не лучше ли мне переставить элементы в перечислении, чтобы они были C=1,D=2,F=3&G=4? Будет ли это более эффективно?
Спасибо, Рон
Платформа: PowerPC, компилятор diab 
2 ответа:
Если компилятор может определить, что параметр оператора switch ограничен небольшим числом, то он может создать таблицу переходов . Эта таблица займет меньше места, если значения будут смежными, но разница между 4 записями или 10 требуемыми вряд ли будет иметь значение. (И обратите внимание, что 0-3-это лучший диапазон, чем 1-4 , хотя компилятор может справиться с этим, перейдя к offset
n - 1).Вы можете проверить выходные данные компилятора, чтобы увидеть, выполняется ли таблица переходов. создано (предполагая, что вы можете прочитать сборку!). И конечно же ответ на все вопросы производительности: профиль его!
Я не могу говорить о компиляторе
diab, потому что я не знаком с ним, но оптимизирующий компилятор, скорее всего, создасттаблицу переходов для оператораswitchнадenum. Так что приказ не имеет значения. Сказав это, вы не должны беспокоиться о таких тривиальных вещах. Поправьте меня, если я неправильно понял ваш вопрос.