Таблица переходов, также известная как таблица ветвлений, представляет собой последовательность инструкций, все из которых безусловно переходят в другую точку кода.
Вы можете рассматривать их как оператор переключения (или выбора), в котором заполняются все дела:
MyJump(int c)
{
switch(state)
{
case 0:
goto func0label;
case 1:
goto func1label;
case 2:
goto func2label;
}
}
Обратите внимание, что возврата нет - код, на который он переходит, выполнит возврат и вернется туда, куда был вызван myjump.
Это полезно для конечных автоматов, где вы выполняете определенный код на основе переменной состояния. Есть много, много других применений, но это одно из основных применений.
Он используется там, где вы не хотите тратить время на работу со стеком и хотите сэкономить место на коде. Это особенно полезно в обработчиках прерываний, где скорость чрезвычайно важна, а периферийное устройство, вызвавшее прерывание, известно только одной переменной. Это похоже на таблицу векторов в процессорах с контроллерами прерываний.
Одно из применений - взять микроконтроллер стоимостью 0,60 долл. И генерировать композитный (ТВ) сигнал для видеоприложений. Микро не очень мощный - на самом деле он достаточно быстр, чтобы написать каждую строку сканирования. Таблица переходов будет использоваться для рисования символов, потому что это займет слишком много времени, чтобы загрузить растровое изображение из памяти, и использовать цикл for (), чтобы вытолкнуть растровое изображение. Вместо этого есть отдельный переход к букве и строке сканирования, а затем 8 или около того инструкций, которые фактически записывают данные непосредственно в порт.
-Adam