¿Cuándo se agota la memoria de un proceso de Windows?

En Windows Server 2003, Enterprise Edition, SP2 (/ 3 GB no habilitado)

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

¿Eso es 2GB de bytes privados y 2GB de bytes virtuales?

¿Obtiene errores de "falta de memoria" cuando se alcanza el límite de bytes privados o el límite de bytes virtuales?

2

6 Respuestas

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, asumido por el sistema operativo. Esto se puede cambiar con el interruptor de 3GB pero puede causar inestabilidad del sistema. Por lo tanto, nos quedamos con 2 GB de memoria direccionable para que el proceso lo use solo. Bueno, no del todo. Resulta que una parte de este espacio lo ocupan 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 se puede manejar accidentalmente por encima de este límite, pero sé de juegos que se cuelgan en grandes mapas de jugadores múltiples 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 activen el indicador de enlazador/LARGEADDRESSAWARE: YES.

4
agregado

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 muchas 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 preocuparse o considerar su uso).

Obtiene 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 etiquetada como "Límite de carga confirmada".

0
agregado

El siguiente enlace lo explica mucho mejor de lo que pude:

MSDN - CLR Inside Out: investigando problemas de memoria

0
agregado

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

For more details, check out MSDN - Memory Limits for Windows Releases

0
agregado

Mark Russinovich started a series of posts on this.. Pushing the Limits of Windows: Physical Memory

Mientras que 4 GB es el límite autorizado para SKU de cliente de 32 bits, el límite efectivo es en realidad menor y depende del chipset del sistema y de los dispositivos conectados. La razón es que el mapa de direcciones físicas incluye no solo RAM, sino también memoria del dispositivo, y los sistemas x86 y x64 asignan toda la memoria del dispositivo por debajo del límite de direcciones de 4GB para permanecer compatible con 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 500MB, 500MB de los 4GB de RAM residirán por encima del límite de la dirección de 4GB.

0
agregado

Solo puede acceder a 2 GB de memoria en total (sin el conmutador 3Gb) en las 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 tanta memoria como sea 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 tu aplicación está en .net o Java, ya que las máquinas virtuales felizmente suben a 32 Gb de memoria en un sistema operativo de 64 bits.

0
agregado