2009-02-20 18 views
8

Por lo que entiendo, un proceso de 32 bits solo puede acceder a 2GB de memoria en ventanas de 32 bits sin el modificador/3GB, y parte de esa memoria es asumida por el sistema operativo por sus propias razones diabólicas. Esto parece encajar con mis experiencias, ya que tenemos una aplicación que se cuelga cuando alcanza alrededor de 1.2 a 1.5 GB de RAM sin excepciones de memoria, aunque todavía hay mucha memoria disponible.¿Puede un proceso de 32 bits acceder a más memoria en un sistema operativo Windows de 64 bits?

Mi pregunta es, ¿movería esta aplicación de 32 bits a las ventanas de 64 bits le permitiría acceder a más de 1.5GB o menos de memoria que ahora puede? ¿O la aplicación en sí misma debe actualizarse a 64 bits?

+0

¿Quiere decir, puede acceder a los 4 Gb completos que sugeriría un puntero de 32 bits? Ciertamente no puede abordar más de 4 Gb sin algún trabajo, pero me gustaría saber si puede usar más de lo que podía bajo Windows de 32 bits. – erickson

Respuesta

12

Las versiones más nuevas de Visual Studio tienen una nueva bandera que hace que las aplicaciones de 32 bits "conozcan el gran espacio de direcciones". Básicamente, lo que hace es decir que si se carga en una versión de Windows de 64 bits, obtendrá 4 GB (el límite de punteros de 32 bits). Esto es ciertamente mejor que los 2 o 3 GB que obtiene en las versiones de 32 bits de Windows. Ver http://msdn.microsoft.com/en-us/library/aa366778.aspx:

Lo más notable es que dice:

límites en el espacio de memoria y dirección varían según la plataforma, sistema operativo, y si el valor IMAGE_FILE_LARGE_ADDRESS_AWARE de la estructura LOADED_IMAGE y 4 gigabytes ajuste (4GT) están en uso. IMAGE_FILE_LARGE_ADDRESS_AWARE se establece en o se borra al usar la opción del enlazador /LARGEADDRESSAWARE.

Véase también: http://msdn.microsoft.com/en-us/library/wz223b1z.aspx

1

Su aplicación estará limitada por el tamaño del puntero, en su ejemplo de 32 bits.

Si su aplicación fue para acceder a más memoria, necesitaría algún tipo de arquitectura de memoria segmentada como la que teníamos en los días de 16 bits donde las aplicaciones usaban punteros de 16 bits y desplazamientos para acceder al espacio completo de memoria de 32 bits.

1

WOW64 permite el uso de aplicaciones de Windows de 32 bits en Windows de 64 bits, la traducción de punteros de 32 bits a los punteros de 64 bits reales. Y, en realidad, el direccionamiento de 32 bits debería permitir el acceso a 4 GB de memoria.

+0

No hay traducción de punteros de 32 bits a 64 bits mientras se ejecuta el código de 32 bits. WOW64 solo se involucra al hacer la transición dentro y fuera del código de 64 bits. –

4

Sí, en las circunstancias adecuadas, un proceso de 32 bits en Windows puede acceder a una memoria de 4 GB completa, en lugar de a los 2 GB a los que normalmente está limitado.

Para que esto funcione, se necesita lo siguiente:

  • La aplicación debe ejecutarse en un sistema operativo de 64 bits
  • La aplicación debe ser compilado con la bandera/LARGEADDRESSAWARE.
  • La aplicación debe probarse para asegurarse de que realmente funciona correctamente en este caso. ;) (específicamente, el código que se basa en todos los punteros que apuntan a direcciones debajo del límite de 2GB obviamente no funcionará aquí)
Cuestiones relacionadas