¿Por qué muchos programas distinguen entre 32 y 64 bits?
La mayor diferencia entre el software de 64 bits y el de 32 bits es que el software de 64 bits puede ejecutarse en más de 4 GB de memoria al mismo tiempo (tenga en cuenta que la memoria aquí se refiere al espacio de direcciones, no memoria física).
Por ejemplo, si tiene una base de datos de 10 GB que necesita ordenarse, el software de 64 bits puede asignar dinámicamente 10 GB de espacio, "colocar" toda la base de datos en la memoria y luego usar cualquier algoritmo de clasificación clásico. mientras que el software de 32 bits falla durante la asignación dinámica. Por lo tanto, los programadores de software de 32 bits deben utilizar algoritmos complejos para leer explícitamente bloques de datos, ordenarlos localmente, luego volver a escribirlos en la base de datos, etc. No sólo es un programa complejo y difícil de escribir, sino que el algoritmo del programador para intercambiar memoria y archivos puede no ser tan eficiente como el manejo automático del sistema operativo.
Por otro lado, el enorme espacio de memoria del software de 64 bits también puede acelerar el consumo de memoria física y aumentar la sobrecarga de direccionamiento, por lo que es posible que no siempre se mejore el rendimiento. Por supuesto, la eficiencia del sistema depende en última instancia del tamaño de la memoria física, y 64 bits solo resuelve el cuello de botella del espacio de direcciones.
¿Cuál es la diferencia entre CPU de 32 bits y CPU de 64 bits? Las CPU de 32 bits y las CPU de 64 bits se diferencian en el conjunto de instrucciones, la cantidad de operandos y los nombres y la cantidad de registros.
Por ejemplo, en una CPU de 32 bits, la instrucción mov
eax, 1 podría corresponder a la instrucción de máquina 0x1201; en una máquina de 64 bits, correspondería a 0x123401. Para la CPU de la máquina, el programa no es más que una serie de códigos 01 dispuestos en secuencia en la memoria, y el sistema operativo se ejecuta directamente en el hardware, por lo que inmediatamente concluirá que una CPU de 32 bits solo puede ejecutar 32 bits. El sistema de operaciones de 64 bits es el mismo.
En teoría, este diseño no tiene nada de malo. De hecho, la arquitectura Intel
IA
64 es así: solo se pueden ejecutar CPU de 64 bits. Sistema operativo de 64 bits (software en sí y una secuencia de instrucciones). Pero entonces surge la pregunta: ¿Necesito actualizar el hardware para aumentar la velocidad? ¿Necesito comprar una CPU y luego reemplazar el sistema operativo de nivel superior y el software de aplicación?
El problema con la incompatibilidad de hardware/software es que no muchos clientes comprarán una CPU que no sea compatible con un entorno de software de 32 bits. En otras palabras, las CPU de 64 bits actualmente convencionales pueden ejecutar sistemas operativos de 32 y 64 bits. Los compiladores y los compiladores de bits de programación también son aplicaciones, y un compilador de 64 bits en una máquina de 64 bits puede compilar aplicaciones de 64 bits.
¿Pero hay excepciones? ¿Cómo surgió el primer sistema operativo de 64 bits? Todos sabemos que los sistemas operativos actuales generalmente se implementan en lenguaje C y luego un compilador los compila en archivos ejecutables como los programas comunes. Entonces, ¿no se compila un sistema operativo de 64 bits con un compilador de 64 bits? Obviamente, su primer sistema operativo de 64 bits requiere un compilador de "64 bits" para compilarse, pero ¿en qué sistema operativo se ejecuta su compilador de 64 bits?
Por supuesto, tengo que ejecutarlo en un sistema operativo de 64 bits, pero ¿de dónde viene tu sistema operativo de 64 bits? Estado de bucle infinito. Por lo tanto, debe haber un compilador, que en sí mismo es un software de 32 bits, pero que puede compilar el programa en un archivo ejecutable de 64 bits. Solo en este caso, el propio compilador mostrará el número de bits y bits del programa compilado. Problema de inconsistencia numérica.
La relación entre los bits del sistema operativo y los bits de software. Aquí, primero debemos descubrir cómo se ejecuta un software. Usaremos un archivo C como ejemplo para analizar nuestro clásico saludo
mundo")} Primero, preprocese el programa fuente y busque el archivo de encabezado que contiene la declaración printf. Luego compílelo en un archivo de destino.
Tenga en cuenta que el archivo de destino ya es un archivo binario y contiene símbolos como main y printf en la tabla de símbolos, pero obviamente, printf no lo escribimos nosotros, solo tenemos su declaración.
En este punto, si miramos el archivo de destino, encontraremos que la función printf en el archivo de destino está marcada como externa, lo que significa que es un símbolo externo y no está definido por nosotros. Aparentemente, el archivo objeto no se puede ejecutar en este momento porque contiene símbolos desconocidos que aún no se han resuelto. Los archivos de destino están vinculados para formar archivos de destino ejecutables. Debido a que el sistema operativo proporciona una biblioteca de enlaces dinámicos compilada, en este momento solo necesitamos vincularla para ejecutar el saludo mágico. De esta forma, ¿no sientes la diferencia entre el software de 32 y 64 bits? No hay problema en llamarlo 128 bits.
Pero hay varias cosas muy importantes en este proceso:
1) Biblioteca de enlaces dinámicos
2) API del sistema Primero, tu sistema de 32 bits. Generalmente hay No hay bibliotecas de 64 bits en el sistema operativo, por lo que si el código fuente de su aplicación hace referencia a funciones que solo están disponibles en una biblioteca de vínculos dinámicos de 64 bits, obviamente tendrá problemas para vincularla.
Además, muchos de nuestros programas definitivamente utilizarán funciones de la biblioteca C como LEER y ESCRIBIR, y la implementación de las funciones de la biblioteca depende de la API del sistema. Si trabaja en Windows, la mayoría de los programas se publican en forma de exe y el programa que obtiene es el resultado del archivo de destino, con bits. Si trabaja en Linux, la mayoría de los paquetes de software, como rpm, se han compilado ellos mismos; , es decir, ellos mismos tienen "bits"
Si estás trabajando en Linux, la mayoría de los paquetes de software como rpm han sido compilados.
Si obtienes el código fuente, entonces básicamente tu aplicación no tiene el concepto de "bits", y cuando el compilador que usas la compila, compila tantos bits como necesita, por lo que es un Aplicación que compila tantos bits como necesite. La cantidad de bits en el programa que analizamos aquí se basa en el estado después de ser compilado en un archivo objeto. Por lo tanto, la coexistencia de software de 32 bits y software de 64 bits es el resultado combinado de CPU, sistema y compilación, todo debido a las necesidades de la época.
Para Windows, suelen existir bibliotecas de 32 bits y otra información necesaria en sistemas de 64 bits, que son básicamente compatibles con programas de 32 bits. Lo anterior es una experiencia personal y un resumen. Espero que pueda ser útil para todos. Si tiene opiniones y sugerencias diferentes, deje un mensaje en el área de comentarios para discutir.