Actualmente estoy en proceso de realizar nuestra aplicación Large Address Aware. Como lo ha demostrado la experiencia, hay algunos inconvenientes inesperados al hacerlo. Creo esta publicación para hacer una lista completa de los pasos que deben tomarse.¿Qué hacer para que la aplicación de gran dirección esté al tanto?
Las consideraciones de desarrollo que figuran en la AMD Large Address Aware guide proporcionan un buen punto de partida, pero son de ninguna manera completa:
las siguientes consideraciones le ayudarán a asegurarse de que el código puede manejar direcciones de más de 2 GB:
- Evite el uso de la aritmética del puntero con signo (es decir, compara y agrega)
- Los punteros usan los 32 bits. No use Bit31 para otra cosa.
- Algunos archivos DLL se cargarán justo debajo del límite de 2GB. En este caso, no se puede asignar memoria consecutiva con VirtualAlloc().
- Siempre que sea posible, use GlobalMemoryStatusEx() (preferido) o GlobalMemoryStatus() para recuperar los tamaños de memoria.
Por lo tanto, la pregunta es: ¿Cuál es la lista completa de cosas que necesitan ser hechas al hacer C++ Win32 aplicación nativa grande Dirección Consciente?
"Eliminar todas las sustracciones del puntero" es excesivo. Los punteros dentro de una única matriz funcionan perfectamente bien. – MSalters
@Suma: las adiciones de puntero NO están bien, ya que las adiciones de puntero pueden desbordarse cuando se establece 'LARGEADDRESSAWARE'. –
además: tenga cuidado con las bibliotecas de terceros tratadas aquí: http://stackoverflow.com/questions/2288728/ – Opmet