2011-05-22 10 views
5

En JavaScript, con mi propia aplicación emulador, para obtener el valor del campo de registro RA de una instrucción de 32 bits i es a menudo representado como:'inline' en JavaScript?

this.gpr.u32[(i >> 16) & 0x1f] 

Sin embargo, tener la expresión anterior muchas veces en una función es fea y difícil de seguir y editar. He evitado definir una variable ra con esa expresión y usarla porque pensé que se almacenaría en la memoria, y recuperarla sería costoso. ¿Debería preocuparme por esto o hacer que los motores de JavaScript modernos 'en línea' el valor de la variable en las declaraciones que siguen la definición? Aunque el uso de una variable hace que el código sea mucho más limpio, realmente no quiero usarlo si ralentiza el tiempo de ejecución en un entorno sensible al rendimiento, como un emulador.

Respuesta

6

Hay una gran cantidad de "depende" en una respuesta. En primer lugar, depende del intérprete de JavaScript qué tan bueno puede optimizar.

Sin embargo, si he entendido bien su código es algo así como

.... this.gpr.u32[(i >> 16) & 0x1f] ... 
.... this.gpr.u32[(i >> 16) & 0x1f] ... 
.... this.gpr.u32[(i >> 16) & 0x1f] ... 

en lugar de

ra = this.gpr.u32[(i >> 16) & 0x1f]; 
.... ra .... 
.... ra .... 
.... ra .... 

En este caso supongo que cualquier motor de javascript ejecutará este último mucho más rápido. Es cierto que tiene una variable adicional ra en la memoria. Pero el acceso a ra no debe ser más lento que el acceso a i más el desplazamiento y la máscara más el acceso al this.gpr.u32.

+0

Gracias! Entonces, lo que está diciendo es que cualquier latencia de acceso no deseado a 'ra' sería superada por la latencia de acceso no deseado de ir a buscar' i', hacer un turno, hacer un AND, y luego ir a buscar un elemento de 'this.gpr. u32', siempre que el motor no almacene en caché de forma automática la forma larga. –

+0

@Delan Azabani: más o menos. Es mucho más fácil para un motor alinear una única variable que la expresión general y, por lo tanto, sospecho que la mayoría de los motores son mucho mejores en la primera. – Howard

+0

Gracias de nuevo. Tu respuesta es muy útil. –