Pregunta

En Windows Server 2003, Enterprise Edition, SP2 (el conmutador / 3GB no está habilitado)

Según tengo entendido, y puedo estar equivocado, la memoria máxima direccionable para un proceso es de 4 GB.

¿Son 2GB de bytes privados y 2GB de bytes virtuales?

¿Te quedas sin memoria? errores cuando se alcanza el límite de byte privado o el límite de byte virtual?

¿Fue útil?

Solución

Es correcto que el espacio de direcciones máximo de un proceso es de 4 GB, en cierto sentido. La mitad del espacio de direcciones es, para cada proceso, ocupado por el sistema operativo. Esto se puede cambiar con el conmutador de 3 GB pero puede causar inestabilidad en el sistema. Por lo tanto, nos quedan 2 GB de memoria direccionable para que el proceso lo use solo. Bueno, no del todo. Resulta que una parte de este espacio está ocupada por otras cosas como las DLL y otro código común. La memoria real disponible para usted como programador es de alrededor de 1.5GB - 1.7GB.

No estoy seguro de cómo puedes manejar accidentalmente por encima de este límite, pero sé de juegos que se bloquean en grandes mapas multijugador por este motivo. Otra cosa a tener en cuenta es que un programa de 32 bits no puede usar más que el espacio de direcciones de 2 GB en un sistema de 64 bits a menos que habiliten el indicador de enlace / LARGEADDRESSAWARE: YES.

Otros consejos

El siguiente enlace lo explica mucho mejor de lo que podría:

MSDN - CLR Inside Out: Investigando problemas de memoria

Mark Russinovich comenzó una serie de publicaciones sobre esto ... Cómo superar los límites de Windows: memoria física

Si bien 4 GB es el límite con licencia para las SKU de clientes de 32 bits, el límite efectivo es en realidad más bajo y depende del chipset del sistema y los dispositivos conectados. La razón es que el mapa de direcciones físicas incluye no solo RAM, sino también la memoria del dispositivo, y los sistemas x86 y x64 mapean toda la memoria del dispositivo por debajo del límite de la dirección de 4GB para seguir siendo compatible con los sistemas operativos de 32 bits que no saben cómo manejar Direcciones de más de 4 GB. Si un sistema tiene 4 GB de RAM y dispositivos, como video, audio y adaptadores de red, que implementan ventanas en la memoria de su dispositivo que suman 500 MB, 500 MB de los 4 GB de RAM residirán por encima del límite de la dirección de 4 GB.

Solo puede acceder a 2 Gb de memoria en total (sin el conmutador de 3Gb) en plataformas Windows de 32 bits.

Puede ejecutar varias máquinas virtuales de 32 bits en un sistema operativo de 64 bits para que cada aplicación tenga acceso a la mayor cantidad de memoria posible si su máquina tiene más de 4 Gb.

Mucha gente está empezando a golpear estas barreras, supongo que es más fácil si su aplicación está en .net o Java, ya que las máquinas virtuales felizmente suben a 32Gb de memoria en 64 bits os.

En 32 bits, si hay suficiente memoria física y espacio en disco para la memoria virtual, la memoria se agota alrededor de 3GB ya que el núcleo reserva el espacio de direcciones por encima de 0xC0000000 para sí mismo. En un kernel de 64 bits que ejecuta una aplicación de 64 bits, el límite es de 8 TB.

Para obtener más detalles, consulte MSDN - Límites de memoria para las versiones de Windows

La memoria máxima direccionable para una máquina de 32 bits es de 4 GB, para una máquina de 64 bits puede abordar cargas más. (Aunque algunas máquinas de 32 bits tienen sistemas de extensión para acceder a más, pero no creo que valga la pena molestarse o considerar su uso).

Se quedan sin errores de memoria cuando se alcanza el límite virtual. En Windows Server 2003, el administrador de tareas le indica el límite en la pestaña de rendimiento con la etiqueta 'Confirmar límite de carga'.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top