IMAGE_FILE_LARGE_ADDRESS_AWARE
solo es relevante para procesos de 32 bits. La razón es que el espacio de direcciones en Windows de 32 bits se divide en dos: 2 GB para el espacio del kernel y 2 GB para el espacio del usuario. Para abordar 2 GB necesita 31 bits. Es decir. los punteros en una aplicación de 32 bits no necesitan el último bit para direccionar.
Algunas aplicaciones pueden haber usado este bit adicional para fines personalizados, por lo que si el administrador de memoria de Windows les entrega repentinamente una dirección real de 32 bits no pueden manejar eso. Al habilitar el indicador IMAGE_FILE_LARGE_ADDRESS_AWARE
, la aplicación básicamente le dice al sistema operativo que puede manejar todo el espacio direccionable de 32 bits.
Si ejecuta una aplicación IMAGE_FILE_LARGE_ADDRESS_AWARE
en Windows de 32 bits, puede acceder a 3 GB. Si ejecuta la misma aplicación de 32 bits en Windows de 64 bits, el proceso realmente obtiene el espacio completo de direcciones de 4 GB.
Si ejecuta una aplicación de 64 bits en Windows de 64 bits, el espacio de direcciones del usuario es de 8 TB (con otros 8 TB reservados para el espacio de direcciones del kernel). Las aplicaciones .NET configuradas en AnyCPU serán automáticamente aplicaciones de 64 bits en x64, por lo que no tiene que hacer nada para direccionar la memoria adicional.
Tenga en cuenta, sin embargo, que el CLR impone un límite de 2 GB en un solo objeto, por lo que aunque su aplicación pueda usar mucha memoria, no puede crear una matriz de 2 TB, por ejemplo. Más información en esta pregunta: Single objects still limited to 2 GB in size in CLR 4.0?
y eso sin tener que hacer nada adicional para configurar IMAGE_FILE_LARGE_ADDRESS_AWARE. es decir, el proceso de 64 bits tiene por defecto ese interruptor. ¿Estoy en lo correcto? – SysAdmin
Si nos limitamos a Windows x64: creo que quiere decir que * puede tener acceso a 8TB *, ya que está limitado por la memoria física disponible y dondequiera que se esté almacenando el archivo de la página. Aún no tenemos discos duros de 8TB. –