2012-08-09 18 views
25

Memory Limits for Windows Releases respuestas de lo que es la cantidad máxima de memoria que cualquier proceso único en Windows puede abordar:La cantidad máxima de memoria que cualquier proceso único en Windows puede abordar

En las versiones de 32 bits de Windows, un solo proceso puede mapa y dirección no más de 3 GB de memoria virtual a la vez. En versiones de 64 bits de Windows , un proceso de 32 bits puede asignar y administrar no más de 4 GB de memoria virtual a la vez.

Para procesos de 64 bits, la cantidad es difícil de calcular ya que hay son numerosos límites que se pueden superponer que podrían aplicarse según todos los tipos de factores . Por lo general, es alrededor de 7TB.

Mi pregunta: ¿Cómo verificar los valores tales como "3GB", "4GB", etc.?

¿Podemos escribir un código C# para demostrarlo? ¿Hay un método para eso?

Gracias.

+0

el enfoque ingenuo (Lea también: aproximación suficientemente buena): iniciar la asignación de memoria hasta que obtenga una excepción OutOfMemory. –

+1

El límite de 3 GB solo se aplica a los sistemas que están configurados para él, solo en los procesos que están configurados para él y perjudica el rendimiento del kernel. Normalmente solo obtienes 2 GB. – Dani

Respuesta

27

Mark Russinovich publicó una serie multiparte sobre los recursos de memoria de Windows realmente cubre esto muy bien. Puede encontrarlo aquí: http://blogs.technet.com/b/markrussinovich/archive/2008/07/21/3092070.aspx

Cubre los motivos por los que los límites son lo que son, además de las pruebas. El código para las pruebas está flotando en algún lugar en los tubos.

Si quiere saber sobre los recursos de la memoria y los problemas que puede ver al filtrar los distintos tipos, es una buena lectura.

Pero, en pocas palabras, 32 bits en sistema operativo de 32 bits: 2 GB, a menos que esté configurado para un gran espacio de direcciones, en cuyo caso 3 GB. Sistema operativo de 32 bits en 64 bits: 2 GB, a menos que esté configurado para un gran espacio de direcciones, en cuyo caso 4 GB.

Proceso de 64 bits: 2 GB, a menos que esté configurado para grandes espacios de direcciones, en cuyo caso podría tratar hasta 8 TB, a menos que esté alojado en un sistema Intel Itanium que se limite a 7 TB.

Microsoft señala los distintos límites (por sabores y tipos) en: http://msdn.microsoft.com/en-us/library/aa366778.aspx

1

Puede escribir algún tipo de bucle en una aplicación de consola para probar esto.

Quizás cree una cadena que sea exactamente 1MB y realice un ciclo a través de un proceso de concatenación para aumentar su tamaño hasta que obtenga ... Error de desbordamiento de pila.

En cada iteración WriteLine el tamaño o el número de iteraciones.

EDITAR

me gustaría añadir, ya que CADENA es inmutable (a pesar de técnicamente ser un tipo de referencia) para utilizar OBJETO

Editar Dos

Trisped señala que una cadena encerrado en un Objeto sigue siendo inmutable.

Crear una matriz de bytes [1024] debería hacer el truco.

+1

¿Debo ajustar el tamaño de la memoria virtual también? –

+0

Solo quiero disminuir la cantidad de variables desconocidas que necesita contar. – Wesley

+0

¿Está sugiriendo que creen una matriz x MB en un lado, luego creen una nueva matriz x + 1 MB de tamaño donde copiarán en la primera matriz más otra matriz y lo harán en un bucle? Sería mejor que hicieras una matriz del tamaño deseado, si eso funciona, elimina la matriz y crea una nueva. Sin embargo, esto sería mejor en C++. – Trisped

Cuestiones relacionadas