2008-09-07 22 views

Respuesta

41

Un salto puede ser un vector de punteros a funciones o un conjunto de instrucciones de salto de código de máquina. Si tiene un conjunto de funciones relativamente estáticas (como llamadas al sistema o funciones virtuales para una clase), puede crear esta tabla una vez y llamar a las funciones utilizando un índice simple en la matriz. Esto significaría recuperar el puntero y llamar a una función o saltar al código de máquina dependiendo del tipo de tabla utilizada.

Los beneficios de hacer esto en la programación incrustado son:

  1. Los índices son más eficientes que la memoria de código máquina o punteros, así que hay un potencial de ahorro de memoria en entornos con limitaciones.
  2. Para cualquier función particular, el índice se mantendrá estable y el cambio de la función se limita a exigir el canje de la función de puntero.

Si le cuesta un poco de rendimiento para acceder a la tabla, pero esto no es peor que cualquier otra llamada a una función virtual.

0

From Wikipedia:

En la programación informática, una tabla de rama (a veces conocida como una tabla de salto ) es un término utilizado para describir un método eficiente de transferir control de programa (ramificación) a otro parte de un programa (o un programa diferente que se haya cargado dinámicamente ) usando una tabla de instrucciones de rama . La construcción de la tabla de ramas se usa comúnmente cuando se programa en lenguaje ensamblador, pero también puede ser generado por un compilador.

Una tabla de rama consiste en una lista serie de incondicionales rama instrucciones que se ramifica en utilizando un desplazamiento creado por la multiplicación de un índice secuencial por la longitud de instrucciones (el número de bytes en la memoria ocupado por cada rama instrucción). Se hace uso del hecho de que la máquina instrucciones de código para hacer ramas tienen una longitud fija y se pueden ejecutar muy eficientemente por la mayoría del hardware , y es más útil cuando tratar con los valores de datos en bruto que pueden ser fácilmente convertidos a secuencial valores de índice. Dados estos datos, una tabla de ramificación puede ser extremadamente eficiente; por lo general, consiste en los siguientes pasos de : validar opcionalmente los datos de entrada para garantizar que sea aceptable; transformando los datos en una compensación en la tabla de bifurcación, este generalmente implica la multiplicación o cambiándolo para tener en cuenta la longitud de instrucción ; y bifurcando a una dirección compuesta por la base de la tabla y el desplazamiento generado: este a menudo implica una adición de la compensación en el registro del programa registro.

1

Una tabla de salto se describe here, pero brevemente, es una matriz de direcciones a la que la CPU debe saltar en función de ciertas condiciones. Como ejemplo, una instrucción de cambio C a menudo se implementa como una tabla de salto donde cada entrada de salto irá a una etiqueta particular de "caso".

En los sistemas embebidos, donde el uso de memoria es escaso, muchas construcciones funcionan mejor utilizando una tabla de salto en lugar de más métodos intensivos en memoria (como un if-else-if masivo).

1

Wikipedia resume bastante bien:

En la programación informática, una tabla de rama (a veces conocido como un salto mesa) es un término utilizado para describir un método eficiente de transferir control de programa (bifurcación) a otra parte de un programa (o un programa diferente que se haya cargado dinámicamente ) utilizando una tabla de instrucciones de rama .La tabla construcción rama se utiliza comúnmente cuando de programación en lenguaje ensamblador, pero también pueden ser generados por un compilador.

... El uso de tablas de rama y otra prima codificación de datos era común en los primeros días de la computación cuando la memoria era caros, CPUs eran más lentos y representación de datos compacta y eficiente elección de las alternativas eran importante. Hoy en día, son comúnmente utilizados en programación integrado y el desarrollo sistema operativo.

En otras palabras, es una construcción útil de usar cuando su sistema es extremadamente limitado en la memoria y/o CPU, como suele ser el caso en una plataforma incrustada.

0

tablas de salto, más a menudo conocidos como tabla de rama, se utilizan generalmente sólo por la máquina.

el compilador crea una lista de todas las etiquetas en un programa de montaje y enlaces a todas las etiquetas de una ubicación en un recuerdo. Una tabla de salto es más o menos una tarjeta de referencia donde una función o variable, o tal vez la etiqueta, se almacena en la memoria.

Así como una función ejecuta, en terminar salta de nuevo a su anterior posición de memoria o salta a la siguiente función, etc.

y si su hablando de lo que creo que usted es, usted no solo necesitan ellos en sistemas integrados, pero en cualquier tipo de entorno compilado/interpretado.

Brian Gianforcaro mesa

21

Una tabla de salto, también conocida como una tabla de rama, es una serie de instrucciones, todo incondicionalmente a otro punto de ramificación en el código.

Puede pensar en ellos como un interruptor (o seleccionar) una declaración en la que se llenan todos los casos:

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

Tenga en cuenta que no hay retorno - el código que salta a la voluntad de ejecutar el cambio, y se saltará de nuevo a donde se llamó myjump.

Esto es útil para las máquinas de estado en el que ejecutar ciertos código basado en la variable de estado. Hay muchos, muchos otros usos, pero este es uno de los principales usos.

Se usa en el que no quiere perder el tiempo jugando con la pila, y desea ahorrar espacio de código. Es especialmente de uso en el manejador de interrupciones, donde la velocidad es extremadamente importante, y el periférico que causó la interrupción sólo se conoce por una sola variable. Esto es similar a la tabla de vectores en procesadores con controladores de interrupción.

Un uso sería tomar un microcontrolador $ 0,60 y generar una señal compuesta (TV) para aplicaciones de vídeo. el micro no es potente; de ​​hecho, es apenas lo suficientemente rápido para escribir cada línea de escaneo. Una tabla de saltos se utiliza para dibujar personajes, porque llevaría demasiado tiempo para cargar un mapa de bits de memoria, y utilizar un bucle for() para empujar el mapa de bits a cabo. En su lugar, hay un salto por separado a la línea de letras y escaneos, y luego 8 o más instrucciones que realmente escriben los datos directamente en el puerto.

-Adam

+2

Yo tenía entendido que el interruptor-casos son en realidad compilados en las tablas de salto? Esto parece una explicación redundante (las tablas de salto son como interruptores que son como tablas de salto que son como interruptores ...) – ArtOfWarfare

0

tablas de salto son habitualmente (pero no exclusivamente) utilizado en finite state machines para que sean impulsadas por los datos.

En lugar de anidada interruptor/caja

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

se puede hacer una matriz o función 2d punteros y simplemente llamar handleEvent[state][event]

Cuestiones relacionadas