Depende de la arquitectura del procesador, pero con la mayoría de las familias de procesadores actuales, se puede acceder más rápido a los objetos en la memoria cuando están alineados con una dirección de memoria de 4 bytes (32 bits) u 8 bytes (64 bits).
Esto se debe a que las líneas de dirección del procesador generalmente están optimizadas para acceder a los objetos desde esas direcciones, por lo que hace que el programa sea más rápido (Acceder a un valor de 16 bits en una dirección de memoria impar es muy costoso, en el peor de los casos, el procesador tardará varios ciclos solo para leer 2 bytes, o use un ciclo para leer un valor de 32 bits de la dirección par más cercana, y use más ciclos para cambiar el contenido en la posición “correcta” y enmascararlo [Tenga en cuenta que algunas instrucciones requieren más ciclos que otras , porque el acceso a la memoria es más lento que el acceso al registro del procesador. Es por eso que en el ensamblaje un registro normalmente se borra haciendo XOR consigo mismo, en lugar de cargarlo con un “0” constante que proviene de la imagen del programa]).
Un compilador tiene en cuenta estos “costos” de estas operaciones e intentará aprovechar el método menos costoso, sacrificando un poco de pérdida de memoria por el rendimiento.
- Cómo escribir un algoritmo de aprendizaje automático que prediga la edad de alguien
- ¿Cómo funciona la función Rolling Hash utilizada en el algoritmo Rabin Karp?
- Dadas dos cadenas de longitud N, ¿cómo encuentro la ventana máxima de patrones coincidentes si pueden mutarse?
- Con los algoritmos de cifrado modernos, ¿es factible que alguien sepa qué algoritmo se utilizó al mirar el texto cifrado?
- ¿Podemos implementar un algoritmo genético sin usar mutación?
Es posible que desee comprobar si se produce el mismo comportamiento si deshabilita completamente todas las optimizaciones.