Uso de memoria de aplicación de 32 bits en el sistema operativo de 64 bits.

13

Si mi sistema operativo es de 64 bits, ¿pueden mis aplicaciones de 32 bits usar memoria de 64 bits (> 3.5 GB)?

Pete2k
fuente

Respuestas:

6

Si la aplicación conoce AWE, puede usar un espacio de direcciones más allá de 4 Gb, aunque de manera menos eficiente que una aplicación de 64 bits. Incluso es posible que los procesos de 32 bits con variantes de Windows de 32 bits accedan más de lo que permitiría el espacio de direcciones de 32 bits, si PAE está habilitado y el proceso es capaz de usarlo.

Un proceso individual de 32 bits (que no tiene conocimiento de AWE) generalmente se limita a 3Gb (el primer Gb de su espacio de direcciones virtuales está reservado para acciones relacionadas con el kernel), pero si está ejecutando múltiples procesos, entonces podrán usar más en total (cada uno puede usar hasta 3Gb, si la memoria total lo permite) ya que sus espacios de direcciones virtuales no se comparten.

El límite por proceso es más útil en un entorno similar a Unix donde los servicios tienden a estar basados ​​en procesos en lugar de en subprocesos (múltiples subprocesos en un proceso comparten los recursos del proceso y, por lo tanto, comparten un solo espacio de dirección virtual de 3Gb) como es más común en Windows (iniciar un nuevo proceso en Windows como bastante costoso, por lo que se prefieren los subprocesos, en la mayoría de los entornos Unix comenzar un nuevo proceso no consume mucho más recursos que comenzar un nuevo subproceso) . No es muy útil para una máquina que ejecuta solo SQL Server, por ejemplo, ya que solo será un proceso, por lo que alcanzará el límite de 3Gb (algunas ediciones se pueden configurar para ser conscientes de AWE pero no todas, y el La función está programada para ser eliminada en la próxima versión principal) .

Además de que los procesos de 32 bits pueden usar más de 3Gb en total, el sistema operativo podrá usar cualquier memoria no utilizada para el almacenamiento en caché del disco, por lo que no se desperdiciará, suponiendo que los procesos no abran archivos de esa manera para decirle al sistema operativo que no se moleste en hacer esto.

David Spillett
fuente
El proceso de 32 bits con el conjunto IMAGE_FILE_LARGE_ADDRESS_AWARE tiene un límite de 4 GB, no 3. msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx
Mark Sowul
5

Si la aplicación usa AWE , entonces sí (aunque esto no está restringido a sistemas operativos de 64 bits). Sin él, el proceso todavía está restringido a un espacio de direcciones de 4GB.

Ignacio Vazquez-Abrams
fuente
-1, aunque es cierto, creo que la respuesta parcial es engañosa ya que ningún proceso de 32 bits (que no sea AWE) tendrá 4GB de RAM disponible.
pipTheGeek 01 de
@pipTheGeek Erroneous: proceso de 32 bits con IMAGE_FILE_LARGE_ADDRESS_AWARE set = 4GB disponible. msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx
Mark Sowul
@ Mark - Me había olvidado de eso, y he corregido mi respuesta a continuación. Sin embargo, todavía creo que esta respuesta está incompleta.
pipTheGeek
3

Sorta, dependiendo de lo que quieras decir.

Suponiendo que Windows ...

Si el sistema operativo es de 64 bits, un proceso de 32 bits por defecto obtiene 2 GB de espacio de dirección virtual de dirección de usuario. Si el encabezado PE del archivo .exe está marcado con el indicador IMAGE_FILE_LARGE_ADDRESS_AWARE, entonces el proceso obtendrá 4 GB de espacio de dirección virtual direccionable por el usuario. En cualquier caso, el espacio de direcciones virtuales del núcleo es el mismo que el de los procesos de 64 bits, ya que se comparte en todos los procesos. También es de destacar que los procesos de 64 bits que no establecen el indicador IMAGE_FILE_LARGE_ADDRESS_AWARE también tienen acceso a 2 GB de espacio de dirección virtual del usuario.

Lo que escucha acerca de los indicadores de arranque especiales, los conmutadores de 3 GB, / 3GB o / userva son todos acerca de los sistemas operativos de 32 bits y no se aplican en Windows de 64 bits.

Todo esto se ha explicado con detalles insoportables en la página de Microsoft Memory Limits para Windows .

La respuesta de @David Spillett también toca otro punto: múltiples procesos, todos limitados a 2 GB de espacio de usuario, aún pueden usar cantidades significativas de RAM si están disponibles, al igual que el caché de archivos.

afrazier
fuente
0

Un proceso de 32 bits en un sistema operativo de 32 bits tiene un espacio de direcciones de 4 GB, 2 GB de los cuales están reservados por el sistema operativo, 2 GB disponibles para el proceso.
Hay un conmutador que se puede especificar en el sistema operativo (/ 3GB) que cambia la cantidad reservada para el sistema operativo a solo 1 GB y permite que el proceso tenga 3GB, PERO, solo si el proceso se declara a sí mismo como una gran dirección consciente de las banderas del ejecutable.

En un sistema operativo de 64 bits, un proceso de 32 bits obtendrá 4 GB si reconoce una dirección grande, de lo contrario, 2 GB.

Todo esto es para procesos que no son conscientes de AWE. Si el proceso es capaz de usar AWE, entonces, como otros han dicho, puede usar un gran espacio de direcciones, pero de manera menos eficiente que un proceso de 64 bits.

PAE permite que un sistema operativo de 32 bits use más de 4 GB de RAM, sin embargo, tiene problemas de compatibilidad y fue deshabilitado en XP por uno de los paquetes de servicio, por lo que solo está disponible en las versiones del sistema operativo del servidor.

pipTheGeek
fuente