¿Cuáles son las diferencias entre los sistemas de 32 y 64 bits?
Si ha usado ambos, ¿qué tipo de diferencias agudas ha experimentado?
¿Sería un problema utilizar programas de 32 bits en sistemas de 64 bits en algunos casos?
¿Cuáles son las diferencias entre los sistemas de 32 y 64 bits?
Si ha usado ambos, ¿qué tipo de diferencias agudas ha experimentado?
¿Sería un problema utilizar programas de 32 bits en sistemas de 64 bits en algunos casos?
Respuestas:
Nota: estas respuestas se aplican a las CPU de PC estándar basadas en x86 (Intel y AMD) y Windows (como se configura normalmente para los usuarios finales). Otros chips de 32 o 64 bits, otros sistemas operativos y otras configuraciones de sistemas operativos pueden tener diferentes ventajas y desventajas.
Desde una perspectiva técnica, un sistema operativo de 64 bits le ofrece:
Permite que los procesos individuales aborden más de 4 GB de RAM cada uno (en la práctica, la mayoría, pero no todos los sistemas operativos de 32 bits, también limitan la RAM total del sistema utilizable a menos de 4 GB, no solo el máximo por aplicación).
Todos los punteros toman 8 bytes en lugar de 4 bytes. El efecto sobre el uso de RAM es mínimo (porque es probable que no tenga una aplicación llena de gigabytes de punteros), pero en el peor de los casos teóricos, esto puede hacer que la memoria caché de la CPU pueda contener 1/2 punteros (haciendo efectivamente será la mitad del tamaño). Para la mayoría de las aplicaciones, esto no es un gran problema.
Hay muchos más registros de CPU de propósito general en modo de 64 bits. Los registros son la memoria más rápida de todo su sistema. Solo hay 8 en modo de 32 bits y 16 registros de propósito general en modo de 64 bits. En las aplicaciones de computación científica que he escrito, he visto un aumento de rendimiento de hasta un 30% al compilar en modo de 64 bits (mi aplicación podría usar los registros adicionales).
La mayoría de los sistemas operativos de 32 bits realmente solo permiten que las aplicaciones individuales usen 2 GB de RAM, incluso si tiene 4 GB instalados. Esto se debe a que los otros 2 GB de espacio de direcciones están reservados para compartir datos entre aplicaciones, con el sistema operativo y para comunicarse con los controladores. Windows y Linux le permitirán ajustar este compromiso para que sea de 3 GB para aplicaciones y 1 GB compartido, pero esto puede causar problemas para algunas aplicaciones que no esperan el cambio. También creo que podría dañar una tarjeta gráfica que tiene 1 GB de RAM (pero no estoy seguro). Un sistema operativo de 64 bits puede ofrecer aplicaciones individuales de 32 bits más cercanas a los 4 GB completos para jugar.
Desde la perspectiva de un usuario:
La velocidad de la aplicación suele ser más rápida para una aplicación de 64 bits en un sistema operativo de 64 bits en comparación con la versión de 32 bits de la aplicación en un sistema operativo de 32 bits, pero la mayoría de los usuarios no verán esta velocidad. La mayoría de las aplicaciones para usuarios normales realmente no aprovechan los registros adicionales o los beneficios se ven compensados por punteros más grandes que llenan el caché.
Si tiene alguna aplicación de memoria (como editores de fotos, procesamiento de video, computación científica, etc.), si tiene (o puede comprar) más de 3 GB de RAM, y puede obtener una versión de 64 bits de la aplicación, La elección es fácil: use el sistema operativo de 64 bits.
Algunos hardware no tiene controladores de 64 bits. Verifique su placa base, todas las tarjetas enchufables y todos los dispositivos USB antes de hacer el cambio. Tenga en cuenta que en los primeros días de Windows Vista, hubo muchos problemas con los controladores. Estos días las cosas son generalmente mejores.
Si ejecutas tantas aplicaciones a la vez que te estás quedando sin memoria RAM (por lo general, puedes decir esto porque tu computadora comienza a ser muy lenta y escuchas el crujido de la unidad de disco duro), entonces querrás un sistema operativo de 64 bits. (y suficiente RAM).
Puede ejecutar aplicaciones de 32 bits (pero no controladores) en Windows de 64 bits sin problemas. La peor ralentización que he medido para una aplicación de 32 bits en Windows de 64 bits es aproximadamente el 5% (lo que significa que si tomó 60 segundos hacer algo en Windows de 32 bits, tomó como máximo 60 * 1.05 = 65 segundos con la misma aplicación de 32 bits en Windows de 64 bits).
Lo que hace 32 bits contra 64 bits no implicar:
En sistemas x86, de 32 bits frente a 64 bits directamente se refiere al tamaño de los punteros. Eso es todo.
No se refiere al tamaño de la C int
tipo. Eso se decide por la implementación particular del compilador, y la mayoría de los compiladores populares eligen 32 bits int
en sistemas de 64 bits.
No es asi directamente consulte el tamaño de los registros normales que no son punteros. Sin embargo, el uso de registros aritméticos de 64 bits requiere que la aplicación y el sistema operativo también se ejecuten en el modo de puntero de 64 bits.
No es asi directamente Consulte el tamaño del bus de direcciones físicas. Por ejemplo, un sistema con líneas de caché de 64 bits de ancho y un máximo de 512GiB de memoria solo necesita 33 bits en su bus de direcciones (es decir, log2(512*1024**3) - log2(64) = 33
).
No se refiere al tamaño del bus de datos físicos: está más relacionado con los costos de fabricación (número de pines en el zócalo de la CPU) y el tamaño de las líneas de caché.
Básicamente puedes hacer todo a una escala mayor:
Los 2 grandes tipos de arquitecturas de 64 bits son las arquitecturas x64 y IA64. Pero x64 es el más popular por mucho.
x64 puede ejecutar comandos x86 así como comandos x64. IA64 también ejecuta comandos x86, pero no hace extensiones SSE. Hay hardware dedicado en Itanium para ejecutar instrucciones x86; Es un emulador, pero en hardware.
Como mencionó @Phil, puede obtener una mirada más profunda de como funciona aqui .
El mayor impacto que las personas notarán en este momento es que una PC de 32 bits solo puede gestionar un máximo de 4 GB de memoria. Cuando saque la memoria asignada para otros usos por el sistema operativo, su PC probablemente solo mostrará alrededor de 3.25GB de memoria utilizable. Mover a 64 bits y este límite desaparece.
Si estás haciendo un desarrollo serio, entonces esto podría ser muy importante. Intenta ejecutar varias máquinas virtuales y pronto te quedarás sin memoria. Es más probable que los servidores necesiten la memoria adicional, por lo que encontrará que el uso de 64 bits es mucho mayor en los servidores que en los escritorios. La ley de Moore garantiza que tendremos cada vez más memoria en las máquinas, por lo que en algún punto, los equipos de escritorio también cambiarán a 64 bits como estándar.
Para obtener una descripción mucho más detallada de las diferencias de procesador, consulte este excelente artículo de ArsTechnica .
Nada es gratis: aunque las aplicaciones de 64 bits. puede acceder a más memoria que a aplicaciones de 32 bits, la desventaja es que necesitar más memoria. Todos esos punteros que solían necesitar 4 bytes, ahora necesitan 8. Por ejemplo, el requisito predeterminado en Emacs es un 60% más de memoria cuando se construye para una arquitectura de 64 bits. Esta huella adicional afecta al rendimiento en todos los niveles de la jerarquía de la memoria: los ejecutables más grandes tardan más en cargarse desde el disco, los conjuntos de trabajo más grandes causan más paginación y los objetos más grandes significan menos ajuste en los cachés del procesador. Si piensa en una CPU con un caché L1 de 16K, una aplicación de 32 bits puede funcionar con 4096 punteros antes de que se pierda y vaya a la caché L2, pero una aplicación de 64 bits tiene que alcanzar la caché L2 solo 2048.
En x64, esto se ve mitigado por otras mejoras arquitectónicas como más registros, pero en PowerPC si su aplicación no puede usar & gt; 4G es probable que se ejecute más rápido en "ppc" que en "ppc64". Incluso en Intel hay cargas de trabajo que se ejecutan más rápido en x86, y pocas se ejecutan más de un 5% más rápido en x64 que en x86.
Un sistema operativo de 64 bits puede utilizar más memoria RAM. Eso es todo, en la práctica. Vista / 7 de 64 bits usa funciones de seguridad más sofisticadas para ubicar componentes vitales en la RAM, pero eso no es realmente "notable" como tal.
De ChrisInEdmonton:
Un sistema operativo de 32 bits en un ix86 Sistema con PAE puede atender hasta 64 GB de RAM. Un sistema operativo de 64 bits. en x86-64 puede acceder hasta 256 TB de espacio de direcciones virtuales, aunque esto puede plantearse en procesadores posteriores, hasta a 16 EB. Tenga en cuenta que algunos operativos Los sistemas limitan el espacio de direcciones Además, y la mayoría de las placas base tienen restricciones adicionales.
No estoy seguro de poder responder a todas sus preguntas sin escribir un ensayo completo (siempre hay Google ...), pero no necesita diseñar sus aplicaciones de manera diferente para 64 bits. Supongo que a lo que se hace referencia es que hay que tener en cuenta que los tamaños de los punteros ya no son del mismo tamaño que los ints. Y tiene una gran cantidad de problemas potenciales con suposiciones incorporadas sobre ciertos tipos de datos que tienen cuatro bytes de longitud que pueden no ser más verdaderos.
Es probable que esto haga tropezar todo tipo de cosas en su aplicación: todo desde guardar / cargar archivos, iterar a través de datos, alineación de datos, hasta operaciones bitwise de datos. Si tiene una base de código existente que está intentando portar, o trabaja en ambos, es probable que tenga un montón de pequeñas cosillas para trabajar.
Creo que este es un problema de implementación, en lugar de un diseño. Es decir. Creo que el "diseño" de, por ejemplo, un paquete de edición de fotos será el mismo, independientemente del tamaño de la palabra. Escribimos código que se compila en versiones de 32 bits y de 64 bits, y el diseño no difiere entre los dos, es el mismo código base.
El "gran problema" fundamental en 64 bits es que usted obtiene acceso a un espacio de direcciones de memoria mucho mayor que 32 bits. Esto significa que realmente puede inyectar más de 4Gb de memoria en su computadora y hacer que haga una diferencia.
Estoy seguro de que otras respuestas irán a los detalles y beneficios más que yo.
En cuanto a la detección de la diferencia, entonces, programáticamente, solo verifica el tamaño de un puntero (por ejemplo, sizeof (void *)). La respuesta de 4 significa sus 32 bits y 8 significa que se está ejecutando en un entorno de 64 bits.
Un proceso de 32 bits tiene un espacio de direcciones virtuales de 4 GB; Esto podría ser muy poco para algunas aplicaciones. Una aplicación de 64 bits tiene un espacio de direcciones prácticamente ilimitado (por supuesto, es limitado, pero lo más probable es que no llegue a este límite).
En OSX hay otras ventajas. Ver el siguiente artículo ¿Por qué hacer que el kernel se ejecute en un espacio de direcciones de 64 bits (independientemente de si su aplicación se ejecuta en 64 o 32) o que su aplicación se ejecute en un espacio de direcciones de 64 bits (mientras que el kernel es de 32 bits) conduce a un rendimiento mucho mejor? Para resumir: si alguno de ellos es de 64 bits (kernel o aplicación, o ambos por supuesto), no se debe vaciar el TLB ("buffer de traducción al lado") siempre que cambie del kernel para usar espacio y retroceso (que acelerará acceso a la memoria RAM).
También tiene mejoras de rendimiento cuando trabaja con variables "long long int" (variables de 64 bits como uint64_t). Una CPU de 32 bits puede agregar / dividir / restar / multiplicar dos valores de 64 bits, pero no en una sola operación de hardware. En su lugar, necesita dividir esta operación en dos (o más) operaciones de 32 bits. Por lo tanto, una aplicación que funciona mucho con números de 64 bits tendrá una ganancia de velocidad de poder hacer matemáticas de 64 bits directamente en hardware.
Por último, pero no menos importante, la arquitectura x86-64 ofrece más registros que las arquitecturas clásicas x86. Trabajar con registros es mucho más rápido que trabajar con RAM y, cuanto más registros tiene la CPU, es menos frecuente que cambie los valores de registro a RAM y luego a registros.
Para saber si su CPU puede ejecutarse en modo de 64 bits, puede mirar varias variables de sysctl. P.ej. abre una terminal y escribe
sysctl machdep.cpu.extfeatures
Si enumera EM64T, su CPU admite espacio de direcciones de 64 bits según el estándar x86-64. También puedes buscar
sysctl hw.optional.x86_64
Si dice 1 (verdadero / habilitado), su CPU admite el modo de Bit x86-64, si dice 0 (falso / deshabilitado), no lo hace. Si no se encuentra la configuración, considere que es falso.
Nota: también puede obtener variables de sysctl desde una aplicación C nativa, sin necesidad de usar la herramienta de línea de comandos. Ver
man 3 sysctl
Tenga en cuenta que el espacio de direcciones se puede utilizar para más memoria (real). También se puede asignar memoria a los archivos grandes, lo que puede mejorar el rendimiento en patrones de acceso más impares debido a que se activa el almacenamiento en caché a nivel de VM a nivel de bloque más potente y eficiente. Es probable que encuentre una fragmentación en el espacio de direcciones que no le permita asignar un bloque grande.
Algunas de las cosas que se dicen en este hilo (como la duplicación de # registros) solo se aplican a x86- & gt; x86_64, no a 64 bits en general. Al igual que el hecho de que bajo x86_64 uno garantizado tiene SSE2, 686 códigos de operación y una forma barata de hacer PIC. Estas características no son estrictamente de 64 bits, sino de eliminar el legado y remediar las limitaciones conocidas de x86
Además, con bastante frecuencia, la gente apunta a que la duplicación de registros sea la causa de la aceleración, mientras que es más probable que el uso predeterminado de SSE2 sea el truco (aceleración de memcpy y funciones similares). Si habilitas el mismo conjunto para x86, la diferencia es mucho menor. (*) (***)
También tenga en cuenta que a menudo hay una penalización inicial porque la estructura de datos promedio aumentará simplemente porque el tamaño del puntero es mayor. Esto también tiene efectos de caché, pero es más perceptible en el hecho de que el promedio de memcpy () (o lo que sea el equivalente para la copia de memoria en su idioma) tomará más tiempo. Esto es solo en la magnitud de unos pocos por ciento por cierto, pero las aceleraciones mencionadas anteriormente también están en esa magnitud.
Por lo general, la sobrecarga de alineación también es mayor en las arquitecturas de 64 bits (los registros de 32 bits anteriormente solo se convierten a menudo en una combinación de valores de 32 y 64 bits), lo que hace que las estructuras exploten aún más.
En general, mis pruebas simples indican que se cancelarán aproximadamente entre sí, si los controladores y las bibliotecas de tiempo de ejecución se han adaptado por completo, sin una diferencia de velocidad significativa para la aplicación promedio. Sin embargo, algunas aplicaciones pueden volverse repentinamente más rápidas (por ejemplo, al depender de AES) o más lentas (la estructura de datos crucial se mueve constantemente / escanea / recorre y contiene muchos punteros). Sin embargo, las pruebas se realizaron en Windows, por lo que la optimización de PIC no se comparó.
Tenga en cuenta que la mayoría de los lenguajes JIT-VM (Java, .NET) usan una cantidad significativamente mayor de punteros en promedio (internamente) que, por ejemplo, C ++. Probablemente su uso de memoria aumente más que para el programa promedio, pero no me atrevo a igualar eso directamente a los efectos de ralentización (ya que son bestias realmente complejas y funky y, a menudo, difíciles de predecir sin medir)
(*) un hecho poco conocido es que el número de registros SSE también se duplica en el modo de 64 bits
(**) El Dr. Dobbs tenía un buen artículo al respecto hace unos años.
Además de los problemas obvios de espacio de memoria que la mayoría de la gente está mencionando aquí, creo que vale la pena considerar la noción de "computación de palabra amplia" de la que Knuth (entre otros) ha estado hablando últimamente. Se pueden obtener muchas eficiencias a través de la manipulación de bits, y las operaciones a nivel de bits en una palabra de 64 bits van mucho más allá que en una palabra de 32 bits. En resumen, puede hacer más operaciones en los registros sin tener que golpear la memoria, y desde una perspectiva de rendimiento, es una gran ganancia.
Echa un vistazo a Volume 4, pre-Fascicle 1A para ver algunos ejemplos de los trucos geniales de los que estoy hablando.
Aparte de la capacidad de direccionar más memoria, x86_64 también tiene más registros que permiten al compilador generar código más eficiente. Sin embargo, la mejora del rendimiento suele ser bastante pequeña.
La arquitectura x86_64 es compatible hacia atrás con x86. Es posible ejecutar sistemas operativos de 32 bits sin modificar. También es posible ejecutar software de 32 bits sin modificar desde un sistema operativo de 64 bits. Sin embargo, eso requerirá todas las bibliotecas de 32 bits habituales. Es posible que deban instalarse por separado.
Este hilo ya es demasiado largo, pero ...
La mayoría de las respuestas se centran en el hecho de que tiene un espacio de direcciones de 64 bits más grande, por lo que puede dirigir más memoria. Para aproximadamente el 99% de todas las aplicaciones, esto es totalmente irrelevante. Grito grande
los real razón de 64 bits es bueno es no que los registros son más grandes, pero hay el doble de ellos! Eso significa que el compilador puede mantener más de sus valores en el registro en lugar de pasarlos a la memoria y volver a cargarlos en unas pocas instrucciones más adelante. Si y cuando un compilador optimizado está desenrollando sus bucles por usted, puede desenrollarlos aproximadamente el doble, lo que realmente puede ayudar al rendimiento.
Además, las convenciones de la persona que llama / llamada de la subrutina para 64 bits se han definido para mantener la mayoría de los parámetros pasados en los registros en lugar de que la persona que llama los inserte en la pila y la persona que los llama los saque.
Por lo tanto, una aplicación "típica" de C / C ++ obtendrá aproximadamente un 10% o un 15% de mejora en el rendimiento con solo la compilación de 64 bits. (Suponiendo que una parte de la aplicación estuviera vinculada a un proceso informático. Por supuesto, esto no está garantizado; todas las computadoras esperan la misma velocidad. Su millaje puede variar).
Con una máquina de 32 bits, solo tiene 4,294,967,295 bytes de memoria por dirección. Con una máquina de 64 bits tiene 1.84467441 × 10 ^ 19 bytes de memoria.
Los procesadores de 64 bits calculan tareas particulares (como factoriales de grandes cifras) el doble de rápido que trabajar en entornos de 32 bits (el ejemplo dado se deriva de la comparación entre la calculadora de Windows de 32 bits y 64 bits; notable para factorial de, por ejemplo, 100 000 ). Esto da una sensación general de las posibilidades teóricas de las aplicaciones optimizadas de 64 bits.
Si bien las arquitecturas de 64 bits facilitan indiscutiblemente el trabajo con grandes conjuntos de datos en aplicaciones como video digital, computación científica y grandes bases de datos, ha habido un considerable debate sobre si ellos o sus modos de compatibilidad de 32 bits serán más rápidos que los de precio comparable. Sistemas de 32 bits para otras tareas. En la arquitectura x86-64 (AMD64), la mayoría de los sistemas operativos y aplicaciones de 32 bits pueden ejecutarse sin problemas en el hardware de 64 bits.
Las máquinas virtuales Java de 64 bits de Sun tienen un inicio más lento que las máquinas virtuales de 32 bits porque Sun solo ha implementado el compilador JIT (C2) "servidor" para plataformas de 64 bits. [9] El compilador JIT "cliente" (C1), que produce un código menos eficiente pero que se compila mucho más rápido, no está disponible en plataformas de 64 bits.
Cabe señalar que la velocidad no es el único factor a considerar en una comparación de procesadores de 32 y 64 bits. Las aplicaciones como multitarea, pruebas de estrés y agrupación en clústeres (para computación de alto rendimiento), HPC, pueden ser más adecuadas para una arquitectura de 64 bits si se implementa correctamente. Los clústeres de 64 bits se han implementado ampliamente en grandes organizaciones como IBM, HP y Microsoft, por este motivo.
Aparte de las ventajas ya mencionadas, aquí hay algunas más sobre seguridad:
Otra ventaja que viene a la mente es que la cantidad de memoria contigua virtual asignada con vmalloc()
en el kernel de Linux puede ser mayor en modo de 64 bits.
Cita de Microsoft.com:
En la siguiente tabla, el aumento recursos máximos de las computadoras que se basan en versiones de 64 bits de Windows y el procesador Intel de 64 bits. Se comparan con los existentes de 32 bits. máximos de recursos.
Kristof y Poshi han declarado que las principales diferencias técnicas entre el sistema operativo de 32 y 64 bits es que la experiencia del usuario suele ser muy diferente a la teoría. Las versiones de 64 bits para el consumidor de Windows hasta la fecha (XP y Vista) tienen grandes agujeros en el soporte de sus controladores. He tenido muchas impresoras, escáneres y otros dispositivos externos que no funcionan con las versiones de 64 bits que funcionan bien con las versiones de 32 bits. Estos son dispositivos que tenían controladores de 64 bits y aún no funcionan. En este punto, le recomendaría que se mantenga alejado de cualquier cosa basada en el consumidor que sea de 64 bits de Microsoft hasta que sepa cómo Windows 7 se encarga de esto, de los usuarios finales reales, no solo de los geeks uber que tienen acceso actualmente. Dale al menos 6 meses y mira lo que la gente está experimentando. Personalmente, instalaré la versión de 32 bits de Windows 7, ya que mis versiones de Vista de 64 bits son un peso de papel costoso que dejé de usar hace eones y volví a XP de 32 bits.
Algunos programas de juego usan un tablero de bits representación. Ajedrez, damas y othello, por ejemplo, tienen un tablero de 8x8, es decir, 64 cuadrados, por lo que tener al menos 64 bits en una palabra de máquina ayuda significativamente al rendimiento.
Recuerdo haber leído sobre un programa de ajedrez cuya construcción de 64 bits era casi el doble de rápida que la versión de 32 bits.
El término 32 bits y 64 bits se refiere a la forma en que un procesador de computadora (también llamado CPU) maneja la información. Las versiones de Windows de 64 bits manejan grandes cantidades de memoria de acceso aleatorio (RAM) de manera más efectiva que los sistemas de 32 bits.
la velocidad puede ser diferente en mi opinión
Otro punto a este respecto con respecto a Microsoft Windows es que durante muchos años ha habido la API Win32, que está diseñada para sistemas operativos de 32 bits y no está optimizada para la compilación de 64 bits. Cuando escribo algunos archivos DLL para mis aplicaciones, generalmente compilo en Win32, que no es la versión de 64 bits de las cosas. Antes de Vista, no ha habido muchas versiones exitosas de Windows de 64 bits. Creo que en el lugar donde trabajo, mi nueva máquina tiene 4 GB de RAM, pero sigo usando Windows XP Pro de 32 bits, ya que se conoce como O / S relativa a XP64 o Vista.
Creo que también querrá mirar hacia atrás cuando hubo un cambio de 16 bits a 32 bits para obtener más detalles sobre por qué el cambio puede ser una gran cosa para algunas personas. Las aplicaciones de misión crítica que una empresa puede ejecutar en un escritorio, por ejemplo. Es posible que los pequeños paquetes de contabilidad no se ejecuten en un sistema operativo de 64 bits y, por lo tanto, existe la necesidad de mantener una máquina heredada, virtual o real.
Cambiar el tamaño de una dirección puede tener grandes ramificaciones y repercusiones.
Para la mayoría de los propósitos prácticos, probablemente no notará una diferencia.
Debe tener una CPU de 64 bits (la mayoría de las CPU en los últimos años) para instalar un sistema operativo de 64 bits.
Hay algunas ventajas para un sistema operativo de 64 bits:
En la mayoría de los escenarios, los programas de 64 bits usan un poco más de memoria, pero para una computadora personal, esto generalmente no se nota.