Los fabricantes de procesadores envan exclusivamente procesadores de 64 bits en sus equipos de escritorio, e incluso los conjuntos de chips de la mayora de los equipos porttiles admiten la tecnologa x64. Es importante que los desarrolladores de juegos aprovechen las mejoras que ofrecen los procesadores de 64 bits con sus nuevas aplicaciones y asegurarse de que sus aplicaciones anteriores se ejecutan correctamente en los nuevos procesadores y las ediciones de 64 bits de Windows Vista y Windows 7. En este artculo se abordan los problemas de compatibilidad y portabilidad, y ayuda a los desarrolladores a facilitar su transicin a plataformas de 64 bits.
Las aplicaciones de 32 bits creadas con la marca del enlazador /LARGEADDRESSAWARE:YES en Windows XP o Windows Server 2003 de 32 bits con la opcin de arranque especial /3gb pueden abordar hasta 3 GB. Esto restringe el kernel a solo 1 GB, lo que puede provocar un error en algunos controladores o servicios.
Las aplicaciones de 32 bits compiladas con la marca del enlazador /LARGEADDRESSAWARE:YES en las ediciones de 32 bits de Windows Vista, Windows Server 2008 y Windows 7 pueden dirigir la memoria hasta el nmero especificado por el elemento de datos de configuracin de arranque (BCD) IncreaseUserVa. IncreaseUserVa puede tener un valor comprendido entre 2048 y 3072 (que coincide con la cantidad de memoria configurada por la opcin de arranque /3gb en Windows XP). El resto de 4 GB se asigna al kernel y puede dar lugar a errores en las configuraciones de controlador y servicio.
Adems de simplemente memoria, las aplicaciones de 64 bits que usan E/S de archivos asignados a memoria se benefician en gran medida del mayor espacio de direcciones virtuales. La arquitectura de 64 bits tambin ha mejorado el rendimiento de punto flotante y el paso ms rpido de parmetros. Los procesadores de sesenta y cuatro bits tienen el doble del nmero de registros, tanto de tipos de extensiones SIMD de uso general como de streaming (SSE), as como compatibilidad con conjuntos de instrucciones SSE y SSE2; muchos procesadores de 64 bits incluso admiten conjuntos de instrucciones SSE3.
Es recomendable especificar el reconocimiento de direcciones grandes al compilar aplicaciones de 32 bits mediante el uso de la marca del enlazador /LARGEADDRESSAWARE, incluso si la aplicacin no est pensada para una plataforma de 64 bits, debido a las ventajas que se obtienen sin costo alguno. Como se explic anteriormente, habilitar esta marca para una compilacin permite que un programa de 32 bits tenga acceso a ms memoria con opciones de arranque especiales en un sistema operativo de 32 bits o en un sistema operativo de 64 bits. Sin embargo, los desarrolladores deben tener cuidado de que no se realicen suposiciones de puntero, por ejemplo, suponiendo que el bit alto nunca se establece en un puntero de 32 bits. En general, habilitar la marca /LARGEADDRESSAWARE es un procedimiento recomendado.
Los sistemas operativos Windows de sesenta y cuatro bits son binarios compatibles con la arquitectura IA32 y la mayora de las API que usan las aplicaciones de 32 bits estn disponibles a travs del Emulador de Windows de 64 bits, WOW64. WOW64 ayuda a garantizar que estas API funcionarn segn lo previsto.
WOW64 tiene una capa de ejecucin que controla la serializacin de datos de 32 bits. WOW64 redirige las solicitudes de archivo DLL, redirige algunas ramas del Registro para aplicaciones de 32 bits y refleja algunas ramas del Registro para aplicaciones de 32 y 64 bits.
La mayora de las aplicaciones desarrolladas para una plataforma de 32 bits se ejecutarn sin problemas en una plataforma de 64 bits. Algunas aplicaciones podran tener problemas, lo que podra incluir lo siguiente:
Adems, los desarrolladores deben tener cuidado con los programas de 16 bits que podran seguir usando. WOW64 no puede controlar aplicaciones de 16 bits; Esto incluye instaladores antiguos y todos los programas MS-DOS.
En la seccin siguiente se describen los problemas relacionados con la portabilidad de cdigo a 64 bits nativos para desarrolladores que quieran asegurarse de que sus programas heredados funcionan en plataformas de 64 bits. Tambin es para desarrolladores que no estn familiarizados con la programacin de 64 bits.
Tener las herramientas y bibliotecas adecuadas ayudarn a facilitar la transicin del desarrollo de 32 bits a 64 bits. El SDK de DirectX 9 tiene bibliotecas para admitir proyectos basados en x86 y x64. Microsoft Visual Studio 2005 y Visual Studio 2008 admiten la generacin de cdigo para x86 y x64, y incluyen bibliotecas optimizadas para generar cdigo x64. Sin embargo, tambin ser necesario que los desarrolladores distribuyan los entornos de ejecucin de Visual C con sus aplicaciones. Tenga en cuenta que las ediciones Express de Visual Studio 2005 y Visual Studio 2008 no incluyen el compilador x64, pero que todas las ediciones Standard, Professional y Team System lo hacen.
Los desarrolladores que tienen como destino plataformas de 32 bits pueden prepararse para el desarrollo de 64 bits para facilitar su transicin ms adelante. Al compilar proyectos de 32 bits, los desarrolladores deben usar la marca /Wp64, lo que provocar la generacin de advertencias sobre problemas que afectan a la portabilidad. Cambiar a las herramientas y bibliotecas de 64 bits probablemente generar muchos errores de compilacin nuevos inicialmente; por lo tanto, es aconsejable cambiar las herramientas y bibliotecas neutras de bits y corregir las advertencias antes de cambiar a una compilacin de 64 bits.
Sin embargo, el cambio de herramientas, el cambio de bibliotecas y el uso de determinadas marcas del compilador no sern suficientes. Las suposiciones en los estndares de codificacin se deben volver a evaluar para asegurarse de que los estndares de codificacin actuales no permiten problemas de portabilidad. Los problemas de portabilidad pueden incluir truncamiento de punteros, tamao y alineacin de tipos de datos, dependencia de archivos DLL de 32 bits, uso de API heredadas, cdigo de ensamblado y archivos binarios antiguos.
Visual C++ 2010 o posterior incluye los encabezados stdint.h y cstdint C99 que definen los tipos de portabilidad estndar int32_t, uint32_t, int64_t, uint64_t, intptr_t y uintptr_t. El uso de estos junto con los tipos de datos estndar ptrdiff_t y size_t puede ser preferible a los tipos de portabilidad de Windows que se usan a continuacin para mejorar la portabilidad del cdigo.
Los punteros son de 64 bits en un sistema operativo de 64 bits, por lo que la conversin de punteros a otros tipos de datos puede provocar truncamiento y la aritmtica de puntero puede provocar daos. El uso de la marca /Wp64 normalmente proporcionar una advertencia sobre este tipo de problema, pero el uso de tipos polimrficos (INT_PTR, DWORD_PTR, SIZE_T, UINT_PTR, etc.) cuando los tipos de puntero de conversin son una buena prctica para ayudar a evitar este problema por completo. Dado que los punteros son de 64 bits en nuevas plataformas, los desarrolladores deben comprobar el orden de los punteros y los tipos de datos en clases y estructuras, para reducir o eliminar el relleno.
Aunque los punteros aumentan de 32 bits a 64 en una plataforma de 64 bits, otros tipos de datos no. Los tipos de datos de precisin fija (DWORD32, DWORD64, INT32, INT64, LONG32, LONG64, UINT32, UINT64) se pueden usar en lugares donde se debe conocer el tamao del tipo de datos; por ejemplo, en una estructura de archivos binarios. Los cambios en el tamao del puntero y la alineacin de los datos requieren un control especial para garantizar la compatibilidad de 32 bits a 64 bits. Puede encontrar ms informacin en Nuevos tipos de datos.
La penalizacin de rendimiento de los accesos no alineados es mayor en la plataforma x64 que en una plataforma x86. Las macros TYPE_ALIGNMENT(t) y FIELD_OFFSET(t, miembro) se pueden usar para determinar la informacin de alineacin que el cdigo puede usar directamente. El uso correcto de estas macros mencionadas anteriormente debe eliminar posibles penalizaciones de acceso no alineadas.
Puede encontrar ms informacin sobre la macro TYPE_ALIGNMENT, la macro de FIELD_OFFSET y la informacin general de programacin de 64 bits en Programacin de Windows de 64 bits: Sugerencias de migracin: Consideraciones adicionales y reglas para usar punteros.
El cdigo de ensamblado insertado no se admite en plataformas de 64 bits y debe reemplazarse. Los cambios en la arquitectura pueden haber cambiado los cuellos de botella de la aplicacin y C/C++ o intrnsecos pueden lograr resultados similares con el cdigo que es ms fcil de leer. La prctica ms recomendable es cambiar todo el cdigo de ensamblado a C o C++. Los intrnsecos se pueden usar en lugar del cdigo de ensamblado, pero solo se deben usar despus de realizar la generacin de perfiles y el anlisis completos.
Los x87, MMX y 3DNow! Los conjuntos de instrucciones estn en desuso en modos de 64 bits. Los conjuntos de instrucciones siguen estando presentes para la compatibilidad con versiones anteriores para el modo de 32 bits; sin embargo, para evitar problemas de compatibilidad en el futuro, no se recomienda su uso en proyectos actuales y futuros.
Algunas API anteriores de DirectX se han quitado para aplicaciones nativas de 64 bits: DirectPlay 4 y versiones anteriores, DirectDraw 6 y versiones anteriores, Direct3D 8 y versiones anteriores, y DirectInput 7 y versiones anteriores. Adems, la API principal de DirectMusic est disponible para aplicaciones nativas de 64 bits, pero la capa de rendimiento y directMusic Producer estn en desuso.
Todos los desarrolladores deben volver a generar perfiles de las aplicaciones que se van a migrar a nuevas arquitecturas. Muchas aplicaciones que se van a migrar a plataformas de 64 bits tendrn perfiles de rendimiento diferentes de sus versiones de 32 bits. Los desarrolladores deben ejecutar pruebas de rendimiento de 64 bits antes de evaluar lo que debe optimizarse. La buena noticia de esto es que muchas optimizaciones tradicionales funcionan en plataformas de 64 bits. Adems, los compiladores de 64 bits tambin pueden realizar muchas optimizaciones con el uso correcto de marcas del compilador y sugerencias de codificacin.
d3342ee215