2008-09-07 8 views

ответ

41

Скачок может быть либо массив указателей на функции или массив инструкций прыжковых машинного кода. Если у вас относительно статический набор функций (например, системные вызовы или виртуальные функции для класса), вы можете создать эту таблицу один раз и вызвать функции, используя простой индекс в массиве. Это означало бы получение указателя и вызов функции или переход к коду машины в зависимости от типа используемой таблицы.

Преимущества делать это во встроенных программ являются:

  1. Индексы больше памяти эффективны, чем машинный код или указателей, так что есть потенциал для экономии памяти в стесненных условиях.
  2. Для любой конкретной функции индекс будет оставаться стабильным, а изменение функции просто требует замены указателя функции.

Если вам требуется небольшая производительность для доступа к таблице, но это не хуже любого другого вызова виртуальной функции.

0

From Wikipedia:

В компьютерном программировании, филиал стол (иногда известный как таблица прыжок ) является термином, используемым для описания эффективного способа передачи программой управления (ветвление) к другим часть программы (или другая программа , которая может быть динамически загружена ) с использованием таблицы ветви . Таблица филиалов обычно используется при программировании на языке ассемблера, но также может быть сгенерирован компилятором.

таблица ветвь состоит из последовательного список безусловных отраслевых инструкций, разветвляется в с использованием смещения создается путем умножения последовательный индекс по длине инструкции (количество байтов в памяти занимаемого каждой ветви инструкция). Она использует тот факт, что машина инструкция кода для разветвления имеет фиксированную длину и может быть выполнена чрезвычайно эффективно большинство аппаратных средств, и является наиболее полезным, когда делом с сырыми значениями данных, которые могут быть легко преобразовано в последовательно значения индекса. Учитывая такие данные, столбец может быть чрезвычайно эффективным; он обычно состоит из следующих этапов: при необходимости подтверждая входные данные, чтобы обеспечить его соответствие ; преобразование данных в смещение в таблицу ветвей, это обычно включает в себя умножение или , сдвигая его, чтобы принять во внимание длину инструкции ; и разветвление на адрес, составленный из базы таблицы , и сгенерированное смещение: этот часто включает в себя добавление смещения на счетчик программ .

1

Таблица переходов описана here, но вкратце, это массив адресов, на которые CPU должен прыгать на основе определенных условий. Например, оператор C-переключателя часто реализуется как таблица перехода, где каждая запись перехода переходит к определенной метке «case».

В встроенных системах, где использование памяти стоит на высоком уровне, многие конструкции лучше обслуживаются с помощью таблицы перехода вместо использования более интенсивных в памяти методов (например, массивное if-else-if).

1

Wikipedia подводит итог довольно хорошо:

В компьютерном программировании, филиал стол (иногда известный как скачок таблицы) это термин, используемый для описания эффективного способа передачи управления программой (разветвление) на другую часть программы (или другая программа , которая могла быть динамически загружена ) с использованием таблицы ветви .Таблица филиалов обычно используется при программировании на языке ассемблера, но также может быть сгенерирован компилятором.

... Использование отраслевых таблиц и других виды кодирования данных было распространен в начале дней вычислений, когда память была дорогие, процессоры были медленнее и компактного представления данных и эффективного выбор альтернатив были важны. В настоящее время они обычно используются во встроенном программировании и развития операционной системы.

Другими словами, это полезная конструкция, используемая, когда ваша система чрезвычайно ограничена памятью и/или процессором, как это часто бывает во встроенной платформе.

0

Таблицы переходов, чаще называемые таблицей ветвей, обычно используются только машиной.

Компилятор создает список всех меток в программе сборки и связывает все метки с ячейкой памяти. Таблица переходов в значительной степени является справочной картой, где, где функция, переменная или что-либо, возможно, ярлык, хранится в памяти.

Так как функция выполняется, по окончании он возвращается в предыдущее местоположение памяти или переход к следующей функции и т.д.

И если ваш говорить о том, что я думаю, что вы, вы не просто нужно их во встроенных системах, но в любой скомпилированной/интерпретируемой среде.

Брайан Gianforcaro стол

21

Таблица перехода, также известная как таблица ветвей, представляет собой серию инструкций, все безоговорочно ветвящиеся в другую точку кода.

Вы можете думать о них как переключатель (или выберите) заявление, где заполнены все случаи:

MyJump(int c) 
{ 
    switch(state) 
    { 
     case 0: 
     goto func0label; 
     case 1: 
     goto func1label; 
     case 2: 
     goto func2label; 
    } 
} 

Обратите внимание, что нет возврата - код, который он переходит к выполнит возврат, и вернется туда, где был вызван myjump.

Это полезно для государственных машин, где вы выполняете определенный код на основе переменной состояния. Существует много и много других применений, но это одно из основных видов использования.

Используется там, где вы не хотите терять время, стекаясь со стеком, и хотите сохранить кодовое пространство. Это особенно полезно для обработчиков прерываний, где скорость чрезвычайно важна, а периферийное устройство, вызвавшее прерывание, известно только одной переменной. Это похоже на таблицу векторов в процессорах с контроллерами прерываний.

Одно использование будет брать микроконтроллер с 0,60 доллара США и генерировать композитный (ТВ) сигнал для видеоприложений. микро не является мощным - на самом деле он просто достаточно быстрый, чтобы писать каждую строку сканирования. Таблицу переходов можно использовать для рисования символов, потому что для загрузки растрового изображения из памяти потребуется слишком много времени, а для цикла for() вытащите битмап. Вместо этого есть отдельный переход к строке письма и сканирования, а затем 8 или около того инструкций, которые фактически записывают данные непосредственно в порт.

-Adam

+2

Это было мое понимание того, что переключатель-дела фактически сведены в таблицы прыжковых? Это похоже на избыточное объяснение (таблицы перехода похожи на переключатели, которые похожи на таблицы перехода, которые похожи на переключатели ...) – ArtOfWarfare 2012-12-13 14:30:57

0

Перейти таблицы обычно (но не исключительно), используемые в finite state machines, чтобы сделать их управляемые данными.

Вместо вложенного переключателя/случай

switch (state) 
    case A: 
     switch (event): 
     case e1: .... 
     case e2: .... 
    case B: 
     switch (event): 
     case e3: .... 
     case e1: .... 

вы можете сделать 2d массива или указатели на функцию и просто вызовите handleEvent[state][event]

 Смежные вопросы

  • Нет связанных вопросов^_^