2010-07-08 18 views
1

Je fais une application qui doit stocker beaucoup de données en mémoire pour améliorer les performances de calcul.App se bloque lorsque QList devient trop grand

Il s'agit d'une hiérarchie de listes et d'objets dans laquelle l'objet supérieur est QList<myObject*>. Lors du chargement des données, beaucoup d'instances de new myObject* sont créées et ajoutées à la liste. La consommation de mémoire augmente et quand il s'agit de ~ 1.9Go le programme se bloque. Mon ordinateur (Vista) a 4 Go de RAM, et j'ai testé sur d'autres ordinateurs avec moins de RAM (XP) et il se bloque au même point. Puis-je ne pas utiliser plus de 1,9 Go de RAM?

Quand un fichier plus petit est chargé et que l'utilisation de la mémoire selon "Windows Task Manager" est de (disons) 1,2 Go, je peux travailler avec les données. Mais si je veux charger un autre fichier, la croissance commence à partir de 1,2 Go même après avoir appelé delete sur tous les objets et effacer la liste. Pourquoi?
J'ai essayé de passer à QVector et d'appeler le squeeze(), mais la mémoire reste la même. J'ai lu les autres discussions sur l'allocation de mémoire dynamique dans QLists, mais est-ce vraiment impossible de réinitialiser la mémoire avant de charger un nouveau fichier? Surtout depuis qu'il se bloque après 1.9Gb; chargement de 3 petits fichiers séquentiellement et je suis là.

Merci beaucoup pour vos suggestions.

+0

Etes-vous sûr que la suppression de votre objet fonctionne? Vérifiez le destructeur de votre objet. Essayez cppcheck http://sourceforge.net/projects/cppcheck/ Il peut détecter certaines fuites de mémoire. –

Répondre

4

Si vous avez Windows 32 bits, votre processus ne peut utiliser que 2 Go de mémoire. Vous ne pouvez pas adresser plus de mémoire avec 32 bits. Si vous avez besoin de plus de mémoire, vous devriez peut-être passer à Windows 64 bits.

+0

Pour mémoire, sur Windows 64 bits, les processus 32 bits peuvent utiliser au maximum 4 Go de mémoire. –