2009-01-29 24 views
9

Vi que en un sistema operativo de Windows de 64 bits, el espacio de direcciones virtuales de usuario disponible es de 8 bytes terra. Pero si el programa que estamos ejecutando en esto se está ejecutando en el modo de compatibilidad de 32 bits, ¿queda esta cantidad de espacio de usuario disponible? o se comporta como un sistema operativo normal de 32 bits y da solo 2 GB de espacio de direcciones de usuario?Espacio de direcciones virtuales en sistemas de 64 bits que se ejecutan en modo de compatibilidad

Respuesta

12

Microsoft tiene un gráfico que muestra los diversos límites: Memory Limits for Windows Releases

resumir sólo el espacio virtual de direcciones en modo usuario:

  • 32-bit de Windows:
    • Proceso de 32 bits: 2 GB por defecto; 3 GB con /LARGEADDRESSAWARE:YES y 4GT
  • 64-bit de Windows (arquitectura x64):
    • 32-bit proceso: 2 GB de forma predeterminada; 4 GB con /LARGEADDRESSAWARE:YES
    • Proceso de 64 bits: 8 TB por defecto; 2 GB con /LARGEADDRESSAWARE:NO

4GT es optimización de 4 gigabytes:

  • XP: cambiar /3GB boot.ini
  • Vista: bcdedit /set increaseuserva 3072

Mark Russinovich hizo un blog publicar explicando muchos de estos límites: Pushing the Limits of Windows: Virtual Memory

+0

importante tener en cuenta que, dependiendo de los ejecutables que se crean, puede que tenga que utilizar * * Editbin para establecer el indicador LARGEADDRESSAWARE en el ejecutable PE, en sí, para aprovechar el espacio de direcciones adicional. – Michael

+0

'proceso de 64 bits: 8 TB por defecto; 2 GB con/LARGEADDRESSAWARE: NO': incluso esta es una opción para limitar el espacio de direcciones de los procesos de 64 bits. ¡Muy interesante! Nunca supe que incluso reduciendo la tapa de la memoria es posible usar banderas. Me pregunto qué uso-caso requerirá tal reducción de tamaño. Siempre queremos aumentar la huella de memoria de nuestro proceso. Muy buena información. – RBT

0

Su proceso solo verá un espacio de direcciones virtuales de 4 GB cuando se ejecuta como un proceso de 32 bits. No podrá abordar nada más alto.

+0

en Windows, un proceso de 32 bits sólo puede acceder a 2 GB de memoria. – JaredPar

+0

Supongo que "ver" fue tal vez la palabra incorrecta. Según entendí, los 2GB por encima estaban reservados para el kernel, pero aún formaban parte del espacio de direcciones virtuales para el proceso, y 2 GB estaban disponibles para las asignaciones de los usuarios. – RussellH

0

Si su programa se ejecuta como un proceso de 32 bits en el subsistema Wow64, verá exactamente el mismo espacio de direcciones que vería en un sistema operativo real de 32 bits. Sin opciones especiales, un proceso de 32 bits tendrá 2GB de memoria disponible.

La única diferencia es la memoria disponible si usa la opción LargeAddressAware. En un proceso normal de 32 bits, esto permite 3 GB de memoria direccionable. En un proceso Wow64 puede ver hasta 4 GB (Source)

+0

/LARGEADDRESSAWARE: YES le proporciona 4 GB de espacio de direcciones virtuales en WoW64, no en 3 GB. – bk1e

+0

@ bk1e, no estaba al tanto de eso. Me llevó un poco buscar en Google, pero pude confirmarlo y actualizar mi publicación. Me parece un cambio muy extraño pero interesante. – JaredPar

0

Por lo que respecta al hardware, cuando se ejecuta en modo de compatibilidad (es decir IA32_EFER.LMA está configurado y el bit L es claro en el descriptor de segmento de CS) los segmentos se comportan como segmentos de 32 bits. Es decir:

  • la base del segmento está limitada a 32 bits.
  • el límite del segmento está limitado a 32 bits también (utilizando el bit G).

Esto efectivamente limita a 4 GB de direcciones virtuales. No estoy familiarizado con la forma en que el SO divide la memoria virtual en varios modos, pero este es el límite de hardware. (Lo siento ... Soy un tipo de hardware, no un experto OS)

0

Cabe señalar que la ejecución de un proceso de 32 bits en IIS 6.0 o superior con una máquina de 64 bits/OS, un proceso puede direccionar hasta a 4GB de memoria.

Cuestiones relacionadas