Solución:
La respuesta a la que hace referencia describe beneficios de 64 bits sobre 32 bits. En cuanto a lo que es realmente diferente sobre el programa en sí, depende de su perspectiva.
En términos generales, el código fuente del programa no tiene por qué ser diferente en absoluto. La mayoría de los programas se pueden escribir de manera que se compilen perfectamente bien como programas de 32 bits o de 64 bits, según se controle mediante la elección adecuada de las opciones de compilador y / o compilador. Hay a menudo algunos impacto en la fuente, sin embargo, ya que un compilador (C) que apunta a 64 bits puede elegir definir sus tipos de manera diferente. En particular, long int
tiene un ancho omnipresente de 32 bits en las plataformas de 32 bits, pero tiene un ancho de 64 bits en muchas (pero no todas) las plataformas de 64 bits. Esto puede ser una fuente de errores en el código que hace suposiciones injustificadas sobre tales detalles.
Las principales diferencias están todas en el binario. Los programas de 64 bits utilizan los conjuntos de instrucciones completos de sus CPU de destino de 64 bits, que invariablemente contienen instrucciones que no contienen las CPU equivalentes de 32 bits. Utilizarán registros que no tienen las CPU equivalentes de 32 bits. Utilizarán convenciones de llamada de función apropiadas para su CPU de destino, lo que a menudo significa pasar más argumentos en los registros que los programas de 32 bits. El uso de estas y otras funciones de las CPU de 64 bits ofrece ventajas funcionales, como la capacidad de utilizar más memoria y (a veces) un rendimiento mejorado.
El tamaño de las palabras es una gran diferencia, pero no es la única. Tiende a definir el número de bits para los que se “clasifica” una CPU, pero el tamaño de la palabra y la capacidad general están relacionados sólo de forma vaga. Y la capacidad general es lo que importa.
En una CPU Intel o AMD, el software de 32 bits frente a 64 bits realmente se refiere al modo en el que opera la CPU cuando se ejecuta. El modo de 32 bits tiene menos registros e instrucciones disponibles, pero la limitación más importante es la cantidad de memoria disponible. El software de 32 bits generalmente se limita a usar entre 2 GB y poco menos de 4 GB de memoria.
Cada byte de memoria tiene una dirección única, que no es muy diferente de que cada casa tenga una dirección postal única. Una dirección de memoria es solo un número que un programa puede usar para encontrar un dato nuevamente una vez que lo ha guardado en la memoria, y cada byte de memoria debe tener una dirección. Si una dirección es de 32 bits, entonces hay 2 ^ 32 direcciones posibles, y eso significa 2 ^ 32 bytes de memoria direccionables. En las CPU Intel / AMD actuales, el tamaño de una dirección de memoria es el mismo que el tamaño de los registros (aunque esto no siempre fue así).
Con direcciones de 32 bits, el programa puede direccionar 4 GB (2 ^ 32 bytes), sin embargo, el sistema operativo reserva hasta la mitad de ese espacio. En el espacio de memoria disponible debe caber el código del programa, los datos y, a menudo, también los archivos a los que se accede. En las PC actuales, con muchos gigabytes de RAM, esto no aprovecha la memoria disponible. Esa es la razón principal por la que 64 bits se ha vuelto popular. Las CPU de 64 bits estuvieron disponibles y se usaron ampliamente (generalmente en modo de 32 bits) durante varios años, hasta que los tamaños de memoria superiores a 2 GB se volvieron comunes, momento en el que el modo de 64 bits comenzó a ofrecer ventajas en el mundo real y se hizo popular. 64 bits de espacio de direcciones de memoria proporcionan 16 exabytes de memoria direccionable (~ 18 trillones de bytes), que es más de lo que cualquier software actual puede usar, y ciertamente ninguna PC tiene tanta RAM.
La mayoría de los datos que se utilizan en aplicaciones típicas, incluso en el modo de 64 bits, no necesitan ser de 64 bits, por lo que la mayor parte todavía se almacena en formatos de 32 bits (o incluso más pequeños). Las representaciones comunes de texto ASCII y UTF-8 utilizan formatos de datos de 8 bits. Si el programa necesita mover un gran bloque de texto de un lugar a otro en la memoria, puede intentar hacerlo 64 bits a la vez, pero si necesita interpretar el texto, probablemente lo hará 8 bits a la vez. . De manera similar, 32 bits es un tamaño común para números enteros (rango máximo de +/- 2 ^ 31, o aproximadamente +/- 2.1 mil millones). 2.1 mil millones es suficiente rango para muchos usos. Los datos gráficos suelen estar representados de forma natural píxel a píxel, y cada píxel, por lo general, contiene como máximo 32 bits de datos.
Existen desventajas en el uso innecesario de datos de 64 bits. Los datos de 64 bits ocupan más espacio en la memoria y más espacio en la memoria caché de la CPU (memoria muy rápida utilizada por la CPU para almacenamiento a corto plazo). La memoria solo puede transferir datos a una velocidad máxima y los datos de 64 bits son dos veces más grandes. Esto puede reducir el rendimiento si se usa derrochando. Y si es necesario admitir versiones de software de 32 bits y 64 bits, usar valores de 32 bits siempre que sea posible puede reducir las diferencias entre las dos versiones y facilitar el desarrollo (aunque no siempre funciona de esa manera).
Antes de 32 bits, la dirección y el tamaño de la palabra solían ser diferentes (por ejemplo, 8086/88 de 16 bits con direcciones de memoria de 20 bits pero registros de 16 bits, o 6502 de 8 bits con direcciones de memoria de 16 bits, o incluso los primeros 32 -bit ARM con direcciones de 26 bits). Si bien ningún programador se burló de los mejores registros, el espacio de la memoria solía ser la verdadera fuerza impulsora de cada generación de tecnología en avance. Esto se debe a que la mayoría de los programadores rara vez trabajan directamente con registros, pero lo hacen directamente con la memoria, y las limitaciones de la memoria causan molestias directamente al programador y, en el caso de 32 bits a 64 bits, también al usuario.
En resumen, si bien existen diferencias tecnológicas reales e importantes entre los distintos tamaños de bits, ¿qué 32 o 64 bits (o 16 u 8 bits) realmente medio es simplemente una colección de capacidades que tienden a asociarse con CPU de una generación tecnológica particular y / o software que aprovecha esas capacidades. La longitud de las palabras es parte de eso, pero no es la única ni necesariamente la parte más importante.
Fuente: Ha sido programador a través de todas estas eras tecnológicas.
Un programa se ejecuta sobre una arquitectura determinada (arch o ISA), que es implementada por procesadores. Por lo general, una arquitectura define un tamaño de palabra “principal”, que es el tamaño que ejecutan la mayoría de los registros y operaciones en esos registros (aunque puede diseñar arquitecturas que funcionen de manera diferente). Esto generalmente se denomina tamaño de palabra “nativo”, aunque una arquitectura puede permitir operaciones utilizando registros de diferentes tamaños.
Además, los procesadores usan memoria y necesitan abordar esa memoria de alguna manera; esto significa operar con esas direcciones. Por lo tanto, las direcciones generalmente se pueden almacenar y manipular como cualquier otro número, lo que significa que tiene registros capaces de almacenarlas. Aunque no se requiere que esos registros coincidan con el tamaño de la palabra ni se requiere que se calcule una dirección a partir de un solo registro, en algunas arquitecturas este es el caso.
A lo largo de la historia, ha habido muchas arquitecturas de diferentes tamaños de palabras, incluso extrañas. Hoy en día, puede encontrar fácilmente procesadores a su alrededor que no son solo de 32 y 64 bits, sino también, por ejemplo, de 8 y 16 bits (normalmente en dispositivos integrados). En una computadora de escritorio típica, está utilizando x86 o x64, que son de 32 y 64 bits respectivamente.
Por lo tanto, cuando dice que un programa es de 32 bits o de 64 bits, se está refiriendo a una arquitectura en particular. En el escenario de escritorio popular, se está refiriendo a x86 frente a x64. Hay muchas preguntas, artículos y libros que discuten las diferencias entre los dos.
Ahora, una nota final: por razones de compatibilidad, los procesadores x64 pueden operar en diferentes modos, uno de los cuales es capaz de ejecutar el código de 32 bits desde x86. Esto significa que si su computadora es x64 (probable) y si su sistema operativo es compatible (también es probable, por ejemplo, Windows de 64 bits), aún puede ejecutar programas compilados para x86.