¿Existe una buena razón para ejecutar software de 32 bits en lugar de 64 bits en máquinas de 64 bits?

50

¿Hay alguna buena razón para proporcionar una versión de 32 bits junto con una versión de 64 bits de cualquier software dirigido a máquinas de escritorio modernas, que ejecute sistemas operativos modernos de 64 bits en hardware de 64 bits?

Parece que el software de 64 bits sería más eficiente, permitiría un mayor uso de la memoria si fuera necesario, etc. Apple incluso utiliza procesadores de 64 bits para sus teléfonos, aunque solo tienen 1-2 GB de RAM, muy por debajo el límite de 4 GB para CPU de 32 bits.

    
pregunta Filip Haglund 15.04.2016 - 11:51

4 respuestas

77

Beneficios del software de 32 bits en entornos de 64 bits

  • Menor espacio de memoria, especialmente en aplicaciones con gran cantidad de punteros, 64 bits frente a 32 bits pueden duplicar fácilmente los requisitos de memoria.
  • Los archivos de objetos también son más pequeños.
  • Compatibilidad con entornos de 32 bits.
  • Las fugas de memoria tienen un límite duro de 2 GB, 3 GB o 4 GB y no inundarán todo el sistema.

Desventajas del software de 32 bits en entornos de 64 bits

  • Límite de memoria de 2 GB, 3 GB o 4 GB por proceso. (Solo por proceso, en resumen, varios procesos de 32 bits pueden usar la memoria del sistema disponible en su totalidad).
  • No se utilizan registros adicionales y extensiones de conjuntos de instrucciones según x64. Esto es altamente específico del compilador y de la CPU.
  • Puede requerir versiones de 32 bits de todas las bibliotecas (la mayoría de las distribuciones de Linux) o infrecuentes (la mayoría de las versiones de Windows) y entornos de ejecución. Si se carga una versión de 32 bits de una biblioteca compartida exclusivamente para su aplicación, y eso cuenta para su huella. No hay ninguna diferencia si está enlazando estáticamente.

Otros aspectos

  • Los controladores no suelen ser un problema. Solo las bibliotecas de espacio de usuario deben diferir entre 32 bits y 64 bits, no la API de los módulos del kernel.
  • Tenga cuidado con los diferentes anchos predeterminados para tipos de datos enteros, se necesitan pruebas adicionales.
  • Es posible que la arquitectura de la CPU de 64 bits ni siquiera admita 32 bits en absoluto.
  • Ciertas técnicas como ASLR y otras que dependen de un espacio de direcciones mucho más grande que la memoria física no funcionarán bien (o en absoluto) en un modo de ejecución de 32 bits.

A menos que comparemos una arquitectura de CPU, un sistema operativo y una infraestructura de biblioteca muy específica aquí, no podré entrar en más detalles.

    
respondido por el Ext3h 15.04.2016 - 13:09
7

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 de enteros. Eso es todo.

Eso significa que todos los punteros de tu programa tienen el doble de tamaño. Y (al menos en una arquitectura ILP32 / LP64) su long s también tiene el doble de tamaño. Esto normalmente resulta en un aumento de alrededor del 30% en el tamaño del código de objeto. Esto significa que ...

  • su código de objeto tardará un 30% más en cargarse desde el disco a la RAM
  • su código de objeto ocupará ~ 30% más de espacio en la memoria
  • ha reducido efectivamente el ancho de banda de su memoria (para código de objeto) en un ~ 20%
  • ha reducido efectivamente el tamaño del caché de instrucciones en un ~ 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: usted hace un montón de matemática de enteros de 64 bits, o necesita más de 4 memorias mapeadas de GiByte. Si uno o ambos son verdaderos, tiene sentido utilizar software de 64 bits, de lo contrario no lo es.

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 están, aunque estrechamente relacionadas, diferentes arquitecturas, siendo x86 solo de 32 bits, AMD64 es de 64 bits solo un poco.

En realidad, esta última afirmación ya no es 100% cierta. Linux recientemente agregó el ABI x32, 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 usar la arquitectura AMD64 de tal manera como si tuviera un nativo Variante de 32 bits. Esto se hizo precisamente porque la sobrecarga de rendimiento que mencioné anteriormente estaba causando reales problemas cuantificables y cuantificables para usuarios del mundo real que ejecutan código del mundo real en sistemas del mundo real.

    
respondido por el Jörg W Mittag 15.04.2016 - 13:35
7

Si el software necesita interactuar directamente con sistemas, controladores o bibliotecas heredados, entonces es posible que deba proporcionar una versión de 32 bits, ya que AFAIK, el sistema operativo en general (definitivamente AFAIK de Windows y Linux) no permite la mezcla de 64- código de bits y de 32 bits dentro de un proceso.

Por ejemplo, si su software necesita acceder a hardware especializado, no es raro que los clientes operen modelos más antiguos para los que solo hay controladores de 32 bits disponibles.

    
respondido por el Michael Borgwardt 15.04.2016 - 12:29
3

Si su software es una DLL, MUST proporciona versiones tanto de 32 bits como de 64 bits. No tiene idea de si el cliente utilizará software de 32 bits o de 64 bits para comunicarse con la DLL, y la DLL debe usar la misma longitud de bits que la aplicación. Esto no es negociable.

Si su software es un ejecutable independiente, es menos claro. Si no necesita que su software se ejecute en sistemas operativos más antiguos, es posible que no necesite proporcionar una versión de 32 bits. Solo manténgase en 64 bits, especifique que requiere un sistema operativo de 64 bits y trabajo hecho.

Sin embargo, si necesita que su software se ejecute en sistemas operativos más antiguos, es posible que desee NOT proporcionar una versión de 64 bits. Si tiene dos versiones, entonces tiene el doble de pruebas, y probar el software de manera adecuada en una variedad de versiones de sistemas operativos e idiomas no es un proceso rápido. Dado que el software de 32 bits se ejecuta perfectamente en una plataforma de 64 bits, todavía es bastante común que el software se lance solo como de 32 bits, especialmente por desarrolladores más pequeños.

También tenga en cuenta que la mayoría de los móviles son de 32 bits. Tal vez algunos de gama alta son de 64 bits ahora, pero hay pocas razones convincentes para dar ese paso. Entonces, si estás desarrollando multiplataforma y es posible que desees que tu código también se ejecute en Android, mantenerte en 32 bits es una opción segura.

    
respondido por el Graham 15.04.2016 - 14:27

Lea otras preguntas en las etiquetas