La diferencia entre el software de 32 bits y el software de 64 bits es el tamaño de los punteros, y tal vez el tamaño de los registros enteros. Eso es.
Eso significa que todos los punteros en su programa son dos veces más grandes. Y (al menos en una arquitectura ILP32 / LP64) sus long
s también son dos veces más grandes. Esto generalmente se traduce en un aumento del 30% en el tamaño del código de objeto. Esto significa que …
- su código objeto tardará ~ 30% más en cargarse del disco a la RAM
- su código objeto ocupará ~ 30% más espacio en la memoria
- ha reducido efectivamente el ancho de banda de su memoria (para el código objeto) en ~ 20%
- ha reducido efectivamente el tamaño de la caché de instrucciones en ~ 20%
Esto tiene un efecto negativo no despreciable en el rendimiento.
Hacer esto solo tiene sentido si puede "recomprar" esos costos de rendimiento de alguna manera. Básicamente, hay dos formas de hacer esto: haces muchos cálculos enteros de 64 bits o necesitas más de 4 memorias mapeadas GiByte. Si uno o ambos son ciertos, tiene sentido usar software de 64 bits, de lo contrario no lo hace.
Nota: hay algunas arquitecturas donde no hay variantes correspondientes de 32 o 64 bits. En ese caso, la pregunta obviamente no tiene sentido. Los más conocidos son IA64, que tiene solo 64 bits y no tiene una variante de 32 bits, y x86 / AMD64 que, aunque están estrechamente relacionados, son arquitecturas diferentes , x86 es solo de 32 bits, AMD64 es solo de 64 bits.
En realidad, esa última afirmación ya no es 100% cierta. Linux agregó recientemente el x32 ABI, que le permite ejecutar código AMD64 con punteros de 32 bits, por lo que, aunque no es una arquitectura de CPU "adecuada", es una forma de utilizar la arquitectura AMD64 de manera tal que tuviera un nativo Variante de 32 bits. Esto se hizo precisamente porque el rendimiento de arriba he mencionado anteriormente estaba causando reales medibles, cuantificables problemas para los usuarios del mundo real que ejecutan código del mundo real en los sistemas del mundo real.