2012-07-09 7 views
6

He notado que mi aplicación nds funciona un poco más rápido cuando reemplazo todas las instancias de bytes con enteros. todos los ejemplos en línea ponen instancias u8/u16 siempre que sea posible. ¿Hay alguna razón específica sobre por qué este es el caso?¿Por qué los enteros procesan más rápido que los bytes en NDS?

+0

¿Puedes dar un ejemplo de código específico? Sospecho que estás viendo ejemplos que declaran variables de 8/16 bits en estructuras, y en cambio las estás usando como locales. –

Respuesta

16

El procesador principal que utiliza la Nintendo DS es ARM9, un procesador de 32 bits.

Referencia: http://en.wikipedia.org/wiki/ARM9

                                       

Normalmente, la CPU realizará operaciones en word sizes, en este caso, 32 bits. Dependiendo de sus operaciones, tener que convertir los bytes hasta enteros o viceversa puede estar causando tensión adicional en el procesador. Esta conversión y la posible falta de instrucciones para valores distintos a los enteros de 32 bits pueden estar causando la falta de velocidad.

7

Complementario a lo que dijo Daniel Li, el acceso a la memoria en plataformas ARM debe estar alineado con las palabras, es decir, las búsquedas de memoria deben ser múltiples de 32 bits. Obtener una variable de byte de la memoria implica recuperar la palabra completa que contiene el byte relevante y realizar las operaciones de bits necesarias para ajustarla en los bits menos significativos del registro del procesador.

Estas instrucciones adicionales son emitidas automáticamente por el compilador, dado que conoce la alineación real de sus variables.

Cuestiones relacionadas