Pregunta

Tengo una aplicación que asigna la memoria con el 'nuevo' y los libera con 'Borrar' en algunas partes del código. El problema es que cada vez que se supera el límite de memoria del sistema (digamos 2 GB), Windows envía una señal de muertes al proceso. Creo que no es habitual, ya que debe utilizar el espacio de intercambio (creo que en las ventanas que se llama memoria virtual), ¿verdad? Mi aplicación está escrita en C ++ / Visual Studio.

¿Fue útil?

Solución

He aquí cómo usted puede hacerlo hasta 3 GB de un proceso; Ese es el máximo absoluto que puede tener para aplicaciones de 32 bits de Windows. Algo más que eso y vas a tener que utilizar una versión de 64 bits de Windows.

Esto es una gran cantidad de memoria. tal vez usted podría considerar dividir su aplicación en múltiples procesos y la comunicación entre ellos.

Otros consejos

El sistema operativo no mata a su aplicación, hace una excepción no controlada. Usted tendrá que examinar su aplicación con Monitor de rendimiento, y ver estos contadores, de conjunto activo, Virtual Bytes, Bytes privados. Obtendrá excepciones cuando los bytes reservados se acerca a 2 GB. Por lo que sus bytes comprometidos y bytes de RAM son mucho menos.

Aquí es un buen artículo sobre el espacio de direcciones virtuales, incluyendo cometido contra reservado.

La moraleja de la historia, no trate de asignar cuando los bytes reservados se acerca a 2 GB, para un proceso de 32 bits.

Windows no utiliza señales. Usted debe obtener la excepción std :: badalloc cuando se ejecuta fuera de la memoria. Que, cuando no detectada, se ejecutará automáticamente la función de cancelar (). La excepción es visible en la ventana de salida.

no he mirado muy de cerca en este, pero es posible encontrar las respuestas que usted quiere aquí:

¿se puede asignar un pedazo muy grande única de la memoria (> 4 GB) en C o C ++?

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