Pregunta

Soy consciente de algunas de las ventajas obvias de la arquitectura x64 (direcciones RAM direccionables más altas, etc.)...pero:

  • ¿Qué pasa si mi programa no tiene una necesidad real de ejecutarse en modo nativo de 64 bits?¿Debería portarlo de todos modos?
  • ¿Existen plazos previsibles para finalizar el soporte de 32 bits?
  • ¿Mi aplicación se ejecutaría más rápido/mejor/más seguro como código x64 nativo?
¿Fue útil?

Solución

x86-64 es un caso un poco especial, para muchas arquitecturas (p. ej.SPARC), compilar una aplicación para el modo de 64 bits no le proporciona ningún beneficio a menos que pueda utilizar de forma rentable más de 4 GB de memoria.Todo lo que hace es aumentar el tamaño del binario, lo que realmente puede hacer que el código Más lento si afecta el comportamiento de la caché.

Sin embargo, x86-64 le ofrece algo más que un espacio de direcciones de 64 bits y registros enteros de 64 bits: también dobles la cantidad de registros de propósito general, que en una arquitectura con registros deficientes como x86 puede resultar en un aumento significativo del rendimiento, con solo una recompilación.

También permite al compilador asumir que están presentes muchas extensiones, como SSE y SSE2, lo que también puede mejorar significativamente la optimización del código.

Otro beneficio es que x86-64 agrega direccionamiento relativo a la PC, lo que puede simplificar significativamente el código independiente de la posición.

Sin embargo, si la aplicación no es sensible al rendimiento, nada de esto tampoco es realmente importante.

Otros consejos

Un posible beneficio que aún no he visto mencionado es que podría descubrir errores latentes.Una vez que lo porte a 64 bits, se realizan una serie de cambios.Los tamaños de algunos tipos de datos cambian, la convención de llamada cambia, el mecanismo de manejo de excepciones (al menos en Windows) cambia.

Todo esto podría provocar que surjan errores que de otro modo estarían ocultos, lo que significa que puedes solucionarlos.

Suponiendo que su código sea correcto y esté libre de errores, la migración a 64 bits debería, en teoría, ser tan simple como presionar un interruptor del compilador.Si eso falla, es porque estás confiando en cosas que el lenguaje no garantiza y, por lo tanto, son fuentes potenciales de errores.

Esto es lo que hace de 64 bits para usted:

  • 64 bits le permite utilizar más memoria que una aplicación de 32 bits.
  • 64 bits hace que todos los punteros de 64 bits, lo que hace que su código de huella más grande.
  • 64 bits le da más enteros y registros de punto flotante, que causa registros sin derramar a la memoria, que debe acelerar su aplicación un tanto.
  • 64 bits puede hacer que las operaciones de la ALU de 64 bits más rápido (sólo es útil si usted está utilizando los tipos de datos de 64 bits).
  • Usted no consigue ningún tipo de seguridad extra (otra respuesta se menciona la seguridad, no estoy al tanto de los beneficios como eso).
  • Usted está limitado a solamente se ejecutan en sistemas operativos de 64 bits.

He portado una serie de aplicaciones C ++ y visto sobre un aumento de velocidad 10% con el código de 64 bits (mismo sistema, mismo compilador, el único cambio fue un modo de compilador de 32 bits vs 64 bits), pero la mayoría de esas aplicaciones estaban haciendo una buena cantidad de matemáticas de 64 bits. Tu caso es distinto.

Yo no me preocuparía por el apoyo de 32 bits va a desaparecer pronto.

(Editado incluir notas de los comentarios - gracias)

Si bien es cierto que de 32 bits será de alrededor por un tiempo de una forma u otra, Windows Server 2008 R2 barcos con un 64-bit sólo SKU. No me sorprendería ver WOW64 como una opción de instalación tan pronto como Windows 8 como más programas migra a 64 bits. WOW64 es una sobrecarga de la instalación, la memoria y el rendimiento. El límite de 3,5 GB de RAM en Windows de 32 bits junto con el aumento de las densidades de RAM animará a esta migración. Yo prefiero tener más RAM de la CPU ...

Abrazo de 64 bits! Tómese el tiempo para hacer su código de 32 bits compatible con 64 bits, es una obviedad y directo. Para aplicaciones normales los cambios son describe con más precisión como correcciones de código. Para los conductores de la elección es: adaptarse o perder usuarios. Cuando llegue el momento usted estará listo para desplegar en cualquier plataforma con una recompilación.

temas relacionados con la OMI actual de caché son discutibles; mejoras de silicio en esta área y una mayor optimización de 64 bits serán próximos.

  1. Si el programa no tiene ninguna necesidad de que se ejecute en 64 bits, ¿por qué lo haría? Si ustedes no están obligados memoria, y no tener grandes conjuntos de datos, no hay ningún punto. El nuevo Miata no tiene neumáticos más grandes, ya que no necesita de ellos.
  2. apoyo
  3. 32 bits (aunque sólo sea a través de la emulación) se extenderá más allá de largo cuando el software deja de ser útil. Todavía emular 2600s Atari, ¿verdad?
  4. No, con toda probabilidad, su aplicación será más lenta en el modo de 64 bits, simplemente porque menos de él caben en la caché del procesador. Puede ser que sea un poco más seguro, pero los buenos programadores no necesitan esa muleta:)

El post de Rico Mariani sobre por qué Microsoft no es portar Visual Studio para 64 bits realmente lo resume Visual Studio: ¿Por qué hay ninguna versión de 64 bits? (Todavía)

Depende de si su código es una aplicación o una biblioteca reutilizable. Para una biblioteca, tener en cuenta que el cliente de esa biblioteca puede tener buenas razones para ejecutarse en modo de 64 bits, así que hay que asegurarse de que su escenario funciona. Esto también se puede aplicar a las aplicaciones cuando son extensibles a través de plugins.

Si usted no tiene ninguna necesidad real ahora, y es probable que nunca, para el modo de 64 bits, debe no portar.

Si usted no tiene la necesidad ahora, pero puede tener algún día, usted debe tratar de estimar la cantidad de esfuerzo que será (por ejemplo, mediante la activación de todas las advertencias del compilador respectivos, e intentar una compilación de 64 bits). Esperan que algunas cosas no son triviales, por lo que será útil saber cómo lo problemas que es probable encontrar, y el tiempo que probablemente se necesitaría para solucionarlos.

Tenga en cuenta que una necesidad también pueden surgir de dependencias:. Si su programa es una biblioteca (por ejemplo, un archivo DLL), puede que sea necesario para portarlo a modo de 64 bits sólo porque un programa de control se portado

En un futuro previsible, las aplicaciones de 32 bits continuarán siendo apoyado.

A menos que haya una razón comercial para ir a 64 bits, entonces no hay verdadera "necesidad" para apoyar a 64 bits.

Sin embargo, hay algunas buenas razones para ir a 64 bits en algún momento, aparte de todos los que otros ya han mencionado.

  • Se está haciendo más difícil para comprar ordenadores que no son de 64 bits. A pesar de que 32 bits aplicaciones se ejecutarán en modo de compatibilidad en los próximos años, los nuevos ordenadores que se venden hoy en día o en el futuro es probable que sean de 64 bits. Si tengo un sistema operativo de 64 bits brillante que realmente no quieren correr "viejas aplicaciones malolientes 32 bits" en modo de compatibilidad!

  • Algunas cosas simplemente no funcionan correctamente en modo comptibility - no es lo mismo que se ejecuta en un sistema operativo de 32 bits en hardware de 32 bits. Me he encontrado con algunos problemas (por ejemplo, el acceso al registro a través de las secciones del Registro de 32/64 bits, programas que fallan porque no están en la carpeta que esperan estar en, etc) cuando se ejecuta en modo de compatibilidad. Siempre me siento nervioso acerca de cómo ejecutar el código en modo de compatibilidad. - es simplemente "no es la cosa real", y que a menudo muestra

  • Si usted ha escrito el código de forma limpia, entonces es probable que sólo tiene que volver a compilar como un archivo EXE de 64 bits y va a funcionar bien, así que no hay verdadera razón para no darle una oportunidad.

  • Cuanto antes se construye una versión nativa de 64 bits, más fácil será para que siga funcionando en 64 bits a medida que agrega nuevas características. Eso es un plan mucho mejor que seguir desarrollando en la Edad Media por otros 'n' años y luego tratar de saltar a la luz.

  • Cuando vaya a su entrevista de trabajo, usted será capaz de decir que usted tiene expeirence de 64 bits y 32-> 64 portar experiencia.

Ya son conscientes de las ventajas x64 (lo más importante es el aumento de tamaño de la RAM) y no está interesado en alguno, entonces no puerto de un archivo ejecutable (.exe). Por lo general, el rendimiento se degrada después de un puerto, debido principalmente al aumento en el tamaño de un módulo 64 sobre 86: todos los punteros ahora requieren de doble longitud, y esto filtra hacia todas partes, incluyendo el tamaño del código (algunos saltos, llamadas a funciones, vtables, invoca virtuales, los símbolos globales etcétera etcétera). no es una degradación significativa, pero suele ser medible (3-5% de disminución de velocidad, depende de muchos factores).

DLL son dignos de portar debido a obtener una nueva 'audiencia' en aplicaciones de 64 bits que son capaces de consumir el archivo DLL.

Algunos sistemas operativos o configuraciones no son capaces de ejecutar programas de 32 bits. A Linux mínimo sin 32-bit libc instalado por ejemplo. También IIRC lo general compilar el soporte de 32 bits desde el núcleo.

Si estos sistemas operativos o configuraciones son parte de su base de usuarios potenciales, entonces sí, usted debe portarlo.

Si necesita más velocidad, entonces debería también portarlo (como han dicho otros, x86-64 tiene más registros e instrucciones interesantes que acelerarlo).

O, por supuesto, si quieres mmap () o de otra manera convertir un archivo de gran tamaño o una gran cantidad de memoria. Luego de 64 bits ayuda.

Por ejemplo, si hubiera escrito el código de 32 bits (GNU C / ++) como a continuación EDIT: código de formato

struct packet {
    unsigned long name_id;
    unsigned short age;
};

para la mensajería de red, entonces usted tiene que hacer portar mientras que re-compilar en un sistema de 64 bits, debido a htonl / ntohl etc, la comunicación se rompen en el caso de los pares de la red sigue utilizando el sistema de 32 bits (utilizando el mismo código que la suya); sabes sizeof (largo) se cambiará 32-64 también a su lado.

Vea más notas acerca de portabilidad 32/64 en http://code.google. com / p / effocore / descargas / lista , nombre del documento EffoCoreRef.pdf.

Es muy poco probable que usted vería ningún beneficio a menos que usted está en necesidad de medidas de seguridad extremas o cantidades obscenas de la RAM.

Básicamente, que había más probable es intuitivamente sabe si su código era un buen candidato para la portabilidad de 64 bits.

En cuanto a los plazos. Yo no me preocuparía, cosas como de 32 bits será de alrededor por un buen tiempo de forma nativa y para un futuro previsible en alguna otra forma.

Véase mi respuesta a esta pregunta aquí. Cerré cabo que post diciendo que un equipo de 64 bits puede almacenar y recuperar información mucho más que un equipo de 32 bits. Para la mayoría de usuarios esto realmente no significa mucho porque las cosas como navegar por Internet, consultar el correo electrónico y jugando al solitario toda trabajar cómodamente dentro de los límites de direccionamiento de 32 bits. Donde el beneficio de 64 bits que realmente va a brillar en las zonas donde se tiene una gran cantidad de datos de la computadora tendrá que batir a través. procesamiento digital de señales, gigapixel fotografía y juegos en 3D avanzada son todas las áreas en las que sus cantidades masivas de procesamiento de datos vería un gran impulso en un entorno de 64 bits.

En cuanto a su código que se ejecuta más rápido / mejor, es totalmente de su código y las exigencias impuestas en ella.

En cuanto a los problemas de rendimiento, que depende de su programa de realidad. Si su programa es triple intensiva, la migración a 64 bits puede causar degradación de rendimiento, ya que para caché de la CPU con el mismo tamaño, cada puntero de 64 bits ocupan más espacio en la memoria caché y las asignaciones de virtual a física también ocupa más espacio TLB . De lo contrario, si el programa no está puntero-intensiva, su rendimiento se beneficiará de x64.

Por supuesto, el rendimiento no es la única razón para portar, otras cuestiones como portar el esfuerzo, la programación de tiempo también debe ser considerado.

Yo recomendaría portarlo a 64 bits para que lo está ejecutando "nativo" (También, utiliza OpenBSD. En su puerto de AMD64, que no proporcionan ningún apoyo de emulación de 32 bits, todo debe ser de 64 bits)

Además, stdint.h es su mejor amigo! Por portar su aplicación, usted debe aprender cómo codificar de forma portátil. Que harán de su trabajo correcto código cuando tenemos procesadores de 128 bits también (en unas pocas décadas suerte)

He portado 2 o 3 cosas a 64 bits y ahora desarrollar para ambos (que es muy fácil si se utiliza stdint.h) y en mi primer proyecto de migración a 64 bit causado como 2 o 3 errores a aparecer, pero eso fue todo. La mayor parte era una simple recompilación y ahora no se preocupe por las diferencias entre los 32 y 64 bits al hacer nuevo código porque acabo codificada automáticamente de forma portátil. (Usando intptr_t y size_t y tal)

En el caso de una DLL que se llama a partir de un proceso de 64 bits, entonces el DLL tiene que ser 64 bits también. Entonces no importa si vale la pena, simplemente no tienen otra opción.

Una de las cuestiones a tener en cuenta es las bibliotecas de software disponibles. Por ejemplo, mi empresa desarrolla una aplicación que utiliza varias bibliotecas de OpenGL, y que lo haga en el sistema operativo openSUSE. En las versiones anteriores del sistema operativo, se puede descargar versiones de 32 bits de estas bibliotecas en la arquitectura x86_64. Las versiones más recientes, sin embargo, no tienen esta. Se hizo más fácil sólo compila en modo de 64 bits.

64 bits se ejecutará mucho más rápido, cuando 64 bits compiladores convierten en madura, pero cuándo ocurrirá No sé

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top