Espacio de direcciones virtuales (Guía de programación para Windows de 64 bits)
De forma predeterminada, las aplicaciones basadas en Microsoft Windows de 64 bits tienen un espacio de direcciones en modo de usuario de varios terabytes. Para obtener valores precisos, consulte Límites de memoria para versiones de Windows y Windows Server. Sin embargo, las aplicaciones pueden especificar que el sistema debe asignar toda la memoria para la aplicación por debajo de 2 gigabytes. Esta característica es beneficiosa para las aplicaciones de 64 bits si se cumplen las condiciones siguientes:
- Un espacio de direcciones de 2 GB es suficiente.
- El código tiene muchas advertencias de truncamiento de puntero.
- Los punteros y los enteros se mezclan libremente.
- El código tiene polimorfismo mediante tipos de datos de 32 bits.
Todos los punteros siguen siendo punteros de 64 bits, pero el sistema garantiza que todas las asignaciones de memoria se produzcan por debajo del límite de 2 GB, de modo que si la aplicación trunca un puntero, no se pierden datos significativos. Los punteros se pueden truncar a valores de 32 bits y, a continuación, ampliarlos a valores de 64 bits mediante la extensión de signo o la extensión cero.
Para especificar esta limitación de memoria, use la opción del enlazador /LARGEADDRESSAWARE:NO . Tenga en cuenta que /LARGEADDRESSAWARE:NO se omite para un binario ARM64. Sin embargo, tenga en cuenta que pueden producirse problemas al usar esta opción. Si compila un archivo DLL que usa esta opción y una aplicación que no usa esta opción llama a la DLL, el archivo DLL podría truncar un puntero de 64 bits cuyos 32 bits superiores son significativos. Esto puede provocar un error en la aplicación sin ninguna advertencia.