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
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
- Proceso de 32 bits: 2 GB por defecto; 3 GB con
- 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
- 32-bit proceso: 2 GB de forma predeterminada; 4 GB con
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
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.
en Windows, un proceso de 32 bits sólo puede acceder a 2 GB de memoria. – JaredPar
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
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)
Mi respuesta original fue bastante mala. Aquí hay un enlace que explica lo que JaredPar estaba diciendo bastante bien.
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)
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.
- 1. En sistemas de 64 bits, ¿una columna de 32 bits ocupa menos espacio que uno de 64 bits?
- 2. espacio de proceso de 32 bits de direcciones en Linux de 64 bits
- 3. Ejecute AnyCPU como 32 bits en sistemas de 64 bits
- 4. ¿Es ctypes.c_long de 64 bits de Python en sistemas de 64 bits?
- 5. Utilice un instalador de NSIS para instalar binarios de 32 bits en sistemas operativos de 32 bits y binarios de 64 bits en sistemas operativos de 64 bits.
- 6. Inno RegKeyExists de configuración en sistemas de 64 bits
- 7. ¿Cómo soporta Linux más de 512 GB de rango de direcciones virtuales en x86-64?
- 8. ¿Hay alguna manera de forzar que una aplicación compilada de "Cualquier CPU" se ejecute en modo de 32 bits en sistemas operativos de 64 bits?
- 9. Compatibilidad con Java de 32 bits frente a 64 bits
- 10. ¿Las aplicaciones de 32 bits se ejecutan más rápido o más lento en un sistema operativo de 64 bits?
- 11. Es un programa que se ejecuta en modo de compatibilidad
- 12. Comunicación serie API para Java en sistemas de 64 bits (interacción de módem)
- 13. ¿Cómo ejecuto un VBScript en modo de 32 bits en una máquina de 64 bits?
- 14. ¿Aplicación de 32 bits o de 64 bits en el sistema operativo de 64 bits?
- 15. Límite de memoria de proceso del proceso de 64 bits
- 16. Importar archivos dll externos basados en sistemas operativos de 64 bits o 32 bits
- 17. Aplicaciones Java de 64 bits: ¿Se requiere un SO de 64 bits, un JRE de 64 bits y una Aplicación de 64 bits?
- 18. ¿Cómo se asignan las mismas direcciones virtuales para diferentes procesos a diferentes direcciones físicas?
- 19. ¿Diferencia entre procesos que se ejecutan en modo kernel y se ejecutan como raíz?
- 20. Memoria del kernel (entradas de direcciones virtuales) en TLB?
- 21. Cómo comprobar si IIS está en el modo de 32 bits o de 64 bits
- 22. Llamada de comprobación de fallos de Windows no solicitada en sistemas de 64 bits
- 23. Llamando COM de 32 bits desde C# ejecutándose en modo de 64 bits
- 24. ¿Es posible ejecutar código de 32 bits en un proceso de 64 bits haciendo el cambio de modo?
- 25. Está escribiendo una referencia atómica en máquinas virtuales de 64 bits
- 26. Compilación de sistema de 64 bits para el sistema de 32 bits - la compatibilidad
- 27. NCover en el sistema de 64 bits
- 28. Tabla de símbolos del kernel mapeada en el espacio de direcciones virtuales - ¿por qué?
- 29. WiX: Impida que el instalador de 32 bits se ejecute en Windows de 64 bits
- 30. Registros de 64 bits en ventanas de 32 bits
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
'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