Debido a que cada personaje debe moverse a otra ubicación de memoria, no hay mucha optimización que pueda hacer.
Sin embargo, como la RAM es más lenta que los registros y la memoria caché, puede leer fragmentos de tamaño de palabra, invertir el orden en el registro y volver a escribirlo. Supongo que estamos tratando con caracteres de 8 bits. En los sistemas de 64 bits, puede leer 8 caracteres en un registro, organizar los bytes en otro registro y volver a escribirlos en una nueva ubicación. Supongamos que ULong es de 64 bits:
registrarse ULong c = * inputString;
* outputString =
((c & 0x00FF) << 56) |
((c & 0xFF00) << 48) |
..
inputString ++;
outputString–;
- ¿Dónde debo desarrollar mi lógica, en matemáticas relacionadas con la programación?
- ¿Qué aplicaciones no son adecuadas para quicksort y por qué?
- ¿Cómo hacemos que una selección sea estable?
- ¿Cuál es el mejor título de proyecto para la estructura de datos del sujeto y el algoritmo?
- ¿Cuál es el significado de 'orden de crecimiento' en el análisis de algoritmos y cómo podemos encontrar el orden de crecimiento de un algoritmo dado?
Reescribiré esa expresión hasta que el compilador genere inserciones de bits en lugar de shift y / o … Por lo general, los compiladores son compatibles con estos contenedores de ensamblaje (como __clz (…) para contar la instrucción de ceros a la izquierda). Si es así, puede usar explícitamente esos contenedores ..
Por cierto, la falta de alineación de datos podría ralentizar el proceso, pero creo que las CPU de hoy se están manejando muy bien. (No he estado trabajando en la plataforma Intel durante mucho tiempo). También debe tener en cuenta los fragmentos que son más pequeños que el tamaño de la palabra.
La forma más optimizada es escribir todo el código en ensamblador. Las instrucciones SIMD (instrucción única de datos múltiples) son muy buenas para reorganizar … En el ensamblaje, puede dar una pista a la CPU para precachear los datos (en la dirección de lectura) o “escribir sin leer”, etc. también. -temporal? Me oxidé en mi ensamblaje Intel .. 🙂
PD: volví a visitar el código para hacerlo más comprensible.