Probablemente todo el mundo se topó con este problema al menos una vez durante el desarrollo:¿Cómo evitar el "intercambio de la muerte" durante el desarrollo?
while(/*some condition here that somehow never will be false*/)
{
...
yourvector.push_back(new SomeType());
...
}
Como se ve el programa comienza a drenar toda la memoria del sistema, se bloquea su programa y su sistema comienza a cambiar a lo loco. Si no reconoce el problema lo suficientemente rápido y mata el proceso, probablemente obtenga un sistema que no responde en segundos, donde el puntero del mouse ni siquiera se mueve. Puede esperar a que se bloquee el programa con un error de "falta de memoria" (que puede demorar varios minutos) o al restablecer en su computadora.
Si no puede localizar el error inmediatamente a continuación, tendrá varias pruebas y restablece para averiguar que es muy molesto ...
Busco ser un medio multiplataforma para evitar que esto de algun modo. Lo mejor sería un código de modo de depuración que sale del programa si asigna demasiada memoria, pero ¿cómo puedo hacer un seguimiento de la cantidad de memoria asignada? Anular los operadores globales nuevos y eliminar no ayudará, porque la función gratuita que invocaría en la eliminación no dará una idea de cuántos bytes se liberan.
Cualquier idea apreciada.
¿Qué sistema operativo está utilizando? ¿Cuánta RAM? ¿Cuál es el tamaño del archivo de paginación? Esencial para saber –
Si es propenso a este tipo de error, simplemente apague el intercambio. Tengo una máquina de desarrollo muy usada frente a mí con un tiempo de actividad de más de un mes. La marca de marea alta para el intercambio máximo utilizado es 22MiB. (linux 2.6.32 4GiB core, swapiness 60) – msw