Pregunta

¿Qué consideraciones debo tener si quiero que mi código se ejecute correctamente en plataformas de 32 y 64 bits?

EDITAR:¿En qué tipo de áreas debo cuidar?¿imprimir cadenas/caracteres o usar estructuras?

¿Fue útil?

Solución

Opciones:

Codificarlo en algún idioma con un Máquina virtual (como Java)

Codifíquelo en .NET y no apunte a ninguna arquitectura específica.El Compilador .NET JIT lo compilará para usted en la arquitectura correcta antes de ejecutarlo.

Otros consejos

Una solución sería apuntar a un entorno virtual que se ejecute en ambas plataformas (estoy pensando en Java o .Net aquí).

O elija un idioma interpretado.

¿Tiene otros requisitos, como llamar a código o bibliotecas existentes?

Las mismas cosas que deberías haber estado haciendo todo el tiempo para asegurarte de escribir código portátil :)

directrices de mozilla y el C preguntas frecuentes son buenos puntos de partida

Supongo que todavía estás hablando de compilando ¿Por separado para cada plataforma individual?Ejecutarlos en ambos es completamente factible simplemente creando un binario de 32 bits.

El más importante es asegurarse de no colocar punteros en ubicaciones de almacenamiento de 32 bits.

Pero en realidad no existe una respuesta "agnóstica del lenguaje" adecuada para esta pregunta.Ni siquiera podría obtener una respuesta particularmente firme si se limitara a algo como el estándar 'C' o 'C++': el tamaño del almacenamiento de datos, los punteros, etc., depende terriblemente de la implementación.

Sinceramente, depende del lenguaje, porque los lenguajes administrados como C# y Java o los lenguajes de scripting como JavaScript, Python o PHP están sujetos a su metodología actual y, para comenzar y hacer cualquier cosa más allá de las cosas avanzadas, no hay mucho de qué preocuparse. .

Pero supongo que estás preguntando sobre lenguajes como C++, C y otros lenguajes de nivel inferior.

Lo más importante de lo que debes preocuparte es el tamaño de las cosas, porque en el mundo de 32 bits estás limitado a la potencia de 2^32, sin embargo, en el mundo de 64 bits las cosas se hacen más grandes 2^64.

Con 64 bits tienes más espacio para memoria y almacenamiento en RAM y puedes calcular números más grandes.Sin embargo, si sabe que está compilando para 32 y 64, debe asegurarse de limitar sus expectativas del sistema al mundo de 32 bits y a las limitaciones de buffers y números.

En C (y tal vez en C++) recuerde siempre usar el operador sizeof al calcular el tamaño del búfer para malloc.De esta manera, escribirá más código portátil de todos modos y esto automáticamente tendrá en cuenta los tipos de datos de 64 bits.

En la mayoría de los casos, lo único que tienes que hacer es compilar tu código para ambas plataformas.(Y eso suponiendo que estés usando un lenguaje compilado;si no es así, probablemente no tenga que preocuparse por nada).

Lo único que se me ocurre que podría causar problemas es asumir el tamaño de los tipos de datos, que es algo que probablemente no deberías hacer de todos modos.Y, por supuesto, cualquier cosa escrita en ensamblador causará problemas.

Tenga en cuenta que muchos compiladores eligen el tamaño del número entero en función de la arquitectura subyacente, dado que "int" debería ser el manipulador de números más rápido del sistema (según algunas teorías).

Esta es la razón por la que tantos programadores usan typedefs para sus programas más portátiles: si desea que su código funcione en todo, desde procesadores de 8 bits hasta procesadores de 64 bits, debe reconocer que, de todos modos, en C, int no está definido rígidamente.

Los punteros son otra área en la que hay que tener cuidado: no utilice un tipo largo, largo o largo ni ningún tipo específico si está jugando con el valor numérico del puntero; utilice la construcción adecuada, que, desafortunadamente, varía de un compilador a otro ( es por eso que tiene un archivo typedef.h separado para cada compilador que utilice).

-Adam Davis

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