Что такое таблица переходов?

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

Прочитайте этот вопрос, чтобы лучше понять различия в деталях . Когда пройти мимо ссылку и когда передать указатель в C ++?

47
задан Pascal Thivent 28 August 2010 в 21:28
поделиться

6 ответов

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

преимущества выполнения этого во встроенном программировании:

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

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

47
ответ дан Josh Segall 7 November 2019 в 13:26
поделиться

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

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

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

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

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

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

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

-Adam

22
ответ дан Adam Davis 7 November 2019 в 13:26
поделиться

Из Википедии :

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

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

1
ответ дан Eric Haskins 7 November 2019 в 13:26
поделиться

Таблица переходов описана здесь , но кратко, это - массив адресов, к которым должен перейти ЦП на основе определенных условий. Как пример, оператор переключения C часто реализуется как таблица переходов, куда каждая запись перехода перейдет к конкретной маркировке "случая".

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

1
ответ дан Jim Buck 7 November 2019 в 13:26
поделиться

Википедия подводит итог его вполне прилично:

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

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

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

1
ответ дан Jason Etheridge 7 November 2019 в 13:26
поделиться

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

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

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

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

Brian Gianforcaro

0
ответ дан Brian Gianforcaro 7 November 2019 в 13:26
поделиться