Оптимизация конструкции switch

Рейтинг: 3Ответов: 1Опубликовано: 30.01.2011

Есть код вида

unsigned char toggle;
unsigned char value[255];

/* ... */

switch (toggle)
{
    case 0: 
        /* Первое действие над value[toggle] */
        break;
    case 1: 
        /* Второе действие над value[toggle] */
        break;
    case 255: 
        /* Последнее действие над value[toggle] */
        break;
}

И этот код очень интенсивно крутится в цикле. Какие есть возможности для его ускорения?

Ответы

▲ 3Принят

Если ничего конкретного не известно про действия, то рекомендации могут быть только общими:

  1. Заставьте компилятор сгенерировать jump table вместо кучи if-else.
  2. Если уж не получается jump table, самый часто встречающиеся альтернативы перенесите наверх (хотя это зависит от компилятора — некоторые генерят if-else код не в том порядке, в котором записан switch).

Добавлено:
Вот, например, про gcc. Судя по тому, что там написано, если я правильно понял Ваш вопрос (т.е. у Вас используются все 256 вариантов, а не только три по краям), то есть реальный шанс получить jump table.