En el de informática, la recompilación dinámica (abreviado a veces al dynarec ) es una característica de algunos emuladores y de las máquinas virtuales donde el sistema puede recompile una cierta parte de un del programa durante la ejecución . Compilando durante la ejecución, el sistema puede adaptar el código generado para reflejar el ambiente run-time del programa, y quizás produce un código más eficiente explotando la información que no está disponible para un recopilador estático tradicional . El

en otros casos, un sistema puede emplear la recompilación dinámica como parte de una estrategia de la optimización adaptante para ejecutar un programa portable representación tal como bytecodes Runtime del lenguaje común Java o de . Las depuraciones Full-speed podrían también utilizarlo para reducir los gastos indirectos del espacio contraídos en la mayoría de las técnicas de Deoptimization, y muchas otras características tales como dinámico roscan la migración .

Ejemplo

Suponer que un programa se está funcionando con en un emulador y que necesita copiar una secuencia nulo-terminada . El programa se compila original para un procesador muy simple. Este procesador puede copiar solamente un octeto a la vez, y debe hacer así que por la primera lectura él de la secuencia de la fuente en un registro, después escritura él de ese registro en la secuencia de la destinación. El programa original pudo mirar algo similar:

lang=asm> del secuencia; Poner la localización del primer carácter de la secuencia de la fuente ; en el registro A movimientos B, indicador de la secuencia; Poner la localización del primer carácter de la secuencia de la destinación ; en el registro B lazo: movimientos C; Copiar el octeto en la dirección adentro colocan A para colocar C movimientos, C; Copiar el octeto en el registro C a la dirección en el registro B CMP C, #0; Comparar los datos que acabamos de copiar a 0 (el marcador del extremo de la secuencia) inc. A; Incrementar la dirección adentro colocan A para señalar a ; el octeto siguiente inc. B; Incrementar la dirección en el registro B para señalar a ; el octeto siguiente lazo del jnz; Si no era 0 entonces tenemos más a copiar, así que volver ; y copiar el octeto siguiente extremo: ; Si entonces no colocamos debemos haber acabado, ; continuar tan con el algo más.

El emulador pudo funcionar en un procesador que es similar, pero extremadamente bueno en las secuencias de copiado, y el emulador sabe que puede aprovecharse de esto. Puede ser que reconozca la secuencia de la copia de la secuencia de instrucciones y decida a reescribirlas más eficientemente momentos antes de la ejecución, para acelerar la emulación.

Decir que hay una instrucción en nuestro nuevo procesador llamado los movs del, diseñados específicamente para copiar secuencias eficientemente. Nuestra instrucción teórica de los movs copia 16 octetos a la vez, sin tener que cargarlos en el registro C mientras tanto, pero parará si copia los 0 octetos (que marca el extremo de una secuencia) y fijó la bandera cero. También sabe que las direcciones de las secuencias estarán adentro colocan A y B, incrementa tan A y B por 16 cada vez que ejecuta, alista para la copia siguiente.

Nuestro nuevo código recompiled pudo mirar algo similar:

beginning: movimientos A, indicador de la secuencia; Poner la localización del primer carácter de la secuencia de la fuente ; en el registro A movimientos B, indicador de la secuencia; Poner la localización del primer carácter de la secuencia de la destinación ; en el registro B lazo: movs; Copiar 16 octetos en la dirección adentro colocan A para tratar ; en el registro B, entonces incrementar A y B por 16 lazo del jnz; Si la bandera cero entonces no se fija no hemos alcanzado ; el extremo de la secuencia, así que vuelve y copia mayor. extremo: ; Si entonces no colocamos debemos haber acabado, ; continuar tan con el algo más.

Hay una ventaja inmediata de la velocidad simplemente porque el procesador no tiene que cargar así que muchas instrucciones de hacer la misma tarea, pero también porque la instrucción de los movs es probable ser optimizada por el diseñador del procesador para ser más eficiente que la secuencia usada en el primer ejemplo (por ejemplo puede hacer un mejor uso de la ejecución paralela en el procesador de incrementar A y B mientras que todavía está copiando octetos).

Productos usar la recompilación dinámica

Muchos recompilación dinámica de la característica de las máquinas virtuales de Java.
El nuevo Rosetta de Apple para OS X del mac en x86, permite que el código de PowerPC sea funcionado con en la arquitectura x86.
Versiones posteriores del emulador del mac 68K usado en OS del mac para funcionar con código 680x0 en el hardware de PowerPC .
Psyco, un que especializa el recopilador para el pitón .
El proyecto, un ejemplo del dínamo del HP de un optimizador dinámico binario transparente .
La máquina virtual VX32 emplea la recompilación dinámica para crear OS - salvaderas independientes x86-architecture para los enchufes seguros del uso.
PC virtual para el mac, usada para funcionar con código X86 en PowerPC.
QEMU, un emulador lleno del sistema de la abrir-fuente.
La funcionalidad de la compatibilidad hacia atrás Xbox 360 (es decir ofensivas terrestres escritas para el original Xbox ) se asume extensamente para utilizar la recompilación dinámica.
El Delfín-Emu, emulador de Nintendo Gamecube, tiene una opción del dynarec.
  • Zenithic
  • Hindu mythology
    Random links:Operación Samwest | Pinzón de la montaña | Armagh | Greystone (estación del Metro-Norte) | 1989 titulares canadienses

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">